diff --git a/include/trick/DRAscii.hh b/include/trick/DRAscii.hh
index bdcc227d..c5707888 100644
--- a/include/trick/DRAscii.hh
+++ b/include/trick/DRAscii.hh
@@ -68,7 +68,7 @@ namespace Trick {
              @code <my_drg> = trick.DRAscii("<in_name>") @endcode
              @copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name)
              */
-            DRAscii( std::string in_name) ;
+            DRAscii( std::string in_name, Trick::DR_Type dr_type = DR_Type::DR_Type_Ascii ) ;
 
             /**
              @copybrief Trick::DataRecordGroup::format_specific_header
diff --git a/include/trick/DRBinary.hh b/include/trick/DRBinary.hh
index c7326703..ba2998ce 100644
--- a/include/trick/DRBinary.hh
+++ b/include/trick/DRBinary.hh
@@ -93,7 +93,7 @@ namespace Trick {
              @code <my_drg> = trick.DRBinary("<in_name>") @endcode
              @copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name)
              */
-            DRBinary( std::string in_name, bool register_group = true, unsigned long job_config = 0x7F ) ;
+            DRBinary( std::string in_name, bool register_group = true, Trick::DR_Type dr_type = DR_Type::DR_Type_Binary ) ;
 
             /**
              @copybrief Trick::DataRecordGroup::format_specific_header
diff --git a/include/trick/DRHDF5.hh b/include/trick/DRHDF5.hh
index a241f20a..0486b4ac 100644
--- a/include/trick/DRHDF5.hh
+++ b/include/trick/DRHDF5.hh
@@ -101,7 +101,7 @@ GROUP "/" {
              @code <my_drg> = trick.DRHDF5("<in_name>") @endcode
              @copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name)
              */
-            DRHDF5( std::string in_name) ;
+            DRHDF5( std::string in_name, Trick::DR_Type dr_type = DR_Type::DR_Type_HDF5) ;
 
             /**
              @copybrief Trick::DataRecordGroup::format_specific_header
diff --git a/include/trick/DataRecordGroup.hh b/include/trick/DataRecordGroup.hh
index b6c2ea7d..ee7ee9b9 100644
--- a/include/trick/DataRecordGroup.hh
+++ b/include/trick/DataRecordGroup.hh
@@ -42,6 +42,14 @@ namespace Trick {
         DR_Not_Specified = 3    /**< Unknown type */
     } ;
 
+    enum class DR_Type : int {
+        DR_Type_None,
+        DR_Type_Ascii,
+        DR_Type_Binary,
+        DR_Type_HDF5,
+        DR_Type_FrameLogDataRecord
+    } ;
+
     class DataRecordBuffer {
         public:
             char *buffer;       /* ** generic holding buffer for data */
@@ -149,7 +157,7 @@ namespace Trick {
              @brief Constructor that creates a new data recording group with the given @c in_name.
              @param in_name - the new data recording group name
             */
-            DataRecordGroup( std::string in_name = "", unsigned long job_config = 0x7F ) ;
+            DataRecordGroup( std::string in_name = "", Trick::DR_Type dr_type = DR_Type::DR_Type_None ) ;
 
             ~DataRecordGroup() ;
 
@@ -409,7 +417,7 @@ namespace Trick {
              @brief This function adds jobs to the DRG based on job_config bits. By default a DRG should be constructed with all jobs on.
              @returns void
             */
-            virtual void configure_jobs(unsigned long job_config) ;
+            void configure_jobs(DR_Type type) ;
 
             /** Check that a variable is supported by data recording. */
             /** Variable must be a single primitive type - no STL, array, structured, string */
diff --git a/trick_source/sim_services/DataRecord/DRAscii.cpp b/trick_source/sim_services/DataRecord/DRAscii.cpp
index 1d6f80ce..55ce144a 100644
--- a/trick_source/sim_services/DataRecord/DRAscii.cpp
+++ b/trick_source/sim_services/DataRecord/DRAscii.cpp
@@ -18,7 +18,7 @@ PROGRAMMERS:
 #include "trick/message_type.h"
 #include "trick/bitfield_proto.h"
 
-Trick::DRAscii::DRAscii( std::string in_name ) : Trick::DataRecordGroup( in_name ) {
+Trick::DRAscii::DRAscii( std::string in_name, Trick::DR_Type dr_type ) : Trick::DataRecordGroup( in_name, dr_type ) {
 
     ascii_float_format = "%20.8g" ;
     ascii_double_format = "%20.16g" ;
diff --git a/trick_source/sim_services/DataRecord/DRBinary.cpp b/trick_source/sim_services/DataRecord/DRBinary.cpp
index 03e71514..2b9b2038 100644
--- a/trick_source/sim_services/DataRecord/DRBinary.cpp
+++ b/trick_source/sim_services/DataRecord/DRBinary.cpp
@@ -22,7 +22,7 @@ PROGRAMMERS:
    Other classes inherit from DRBinary. In these cases, we don't want to register the memory as DRBinary,
    so register_group will be set to false.
 */
-Trick::DRBinary::DRBinary( std::string in_name, bool register_group, unsigned long job_config ) : Trick::DataRecordGroup(in_name, job_config) {
+Trick::DRBinary::DRBinary( std::string in_name, bool register_group, Trick::DR_Type dr_type ) : Trick::DataRecordGroup(in_name, dr_type) {
     if ( register_group ) {
         register_group_with_mm(this, "Trick::DRBinary") ;
     }
diff --git a/trick_source/sim_services/DataRecord/DRHDF5.cpp b/trick_source/sim_services/DataRecord/DRHDF5.cpp
index 8f70f196..0ea955f6 100644
--- a/trick_source/sim_services/DataRecord/DRHDF5.cpp
+++ b/trick_source/sim_services/DataRecord/DRHDF5.cpp
@@ -14,7 +14,7 @@ PROGRAMMERS:
 #include "trick/memorymanager_c_intf.h"
 #include "trick/message_proto.h"
 
-Trick::DRHDF5::DRHDF5( std::string in_name ) : Trick::DataRecordGroup(in_name) {
+Trick::DRHDF5::DRHDF5( std::string in_name, Trick::DR_Type dr_type ) : Trick::DataRecordGroup(in_name, dr_type) {
     register_group_with_mm(this, "Trick::DRHDF5") ;
 }
 
diff --git a/trick_source/sim_services/DataRecord/DataRecordGroup.cpp b/trick_source/sim_services/DataRecord/DataRecordGroup.cpp
index a67f7076..846b9e32 100644
--- a/trick_source/sim_services/DataRecord/DataRecordGroup.cpp
+++ b/trick_source/sim_services/DataRecord/DataRecordGroup.cpp
@@ -54,7 +54,7 @@ Trick::DataRecordBuffer::~DataRecordBuffer() {
     free(ref) ;
 }
 
-Trick::DataRecordGroup::DataRecordGroup( std::string in_name, unsigned long job_config ) :
+Trick::DataRecordGroup::DataRecordGroup( std::string in_name, Trick::DR_Type dr_type ) :
  record(true) ,
  inited(false) ,
  group_name(in_name) ,
@@ -96,15 +96,7 @@ Trick::DataRecordGroup::DataRecordGroup( std::string in_name, unsigned long job_
     // sim object name
     name = std::string("trick_data_record_group_") + in_name ;
 
-    /*
-        By default we want to configure our jobs. 
-        Some derived classes (looking at you FrameDataRecordGroup) want to setup their jobs differently,
-        so we provide the option to disable this step
-
-        For context - FrameDataRecordGroup does not want to create restart jobs,
-        but rather the FrameLog object which owns those DRG's will manually retsart them from the FrameLog's restart job.
-    */
-    configure_jobs(job_config);
+    configure_jobs(dr_type) ;
 
     add_time_variable() ;
 }
@@ -426,28 +418,28 @@ int Trick::DataRecordGroup::init() {
 
 }
 
-void Trick::DataRecordGroup::configure_jobs(unsigned long job_config)
-{
-    // add_jobs_to_queue will fill in job_id later
-    // make the init job run after all other initialization jobs but before the post init checkpoint
-    // job so users can allocate memory in initialization jobs and checkpointing data rec groups will work
-    if(job_config & 1)
-        add_job(0, 1, (char *)"initialization", NULL, cycle, (char *)"init", (char *)"TRK", 65534) ;
-    if(job_config & 2)
-        add_job(0, 2, (char *)"end_of_frame", NULL, 1.0, (char *)"write_data", (char *)"TRK") ;
-    if(job_config & 4)
-        add_job(0, 3, (char *)"checkpoint", NULL, 1.0, (char *)"checkpoint", (char *)"TRK") ;
-    if(job_config & 8)
-        add_job(0, 4, (char *)"post_checkpoint", NULL, 1.0, (char *)"clear_checkpoint_vars", (char *)"TRK") ;
-    if(job_config & 16)
+void Trick::DataRecordGroup::configure_jobs(DR_Type type) {
+
+    //std::cout << "!!!!!!!!!! DataRecordGroup::configure_jobs: " << (int)type << std::endl;
+
+    switch(type) {
+    default:
         // run the restart job in phase 60001
         add_job(0, 5, (char *)"restart", NULL, 1.0, (char *)"restart", (char *)"TRK", 60001) ;
-    if(job_config & 32)
+
+    case DR_Type::DR_Type_FrameLogDataRecord:
+        // add_jobs_to_queue will fill in job_id later
+        // make the init job run after all other initialization jobs but before the post init checkpoint
+        // job so users can allocate memory in initialization jobs and checkpointing data rec groups will work
+        add_job(0, 1, (char *)"initialization", NULL, cycle, (char *)"init", (char *)"TRK", 65534) ;
+        add_job(0, 2, (char *)"end_of_frame", NULL, 1.0, (char *)"write_data", (char *)"TRK") ;
+        add_job(0, 3, (char *)"checkpoint", NULL, 1.0, (char *)"checkpoint", (char *)"TRK") ;
+        add_job(0, 4, (char *)"post_checkpoint", NULL, 1.0, (char *)"clear_checkpoint_vars", (char *)"TRK") ;
         add_job(0, 6, (char *)"shutdown", NULL, 1.0, (char *)"shutdown", (char *)"TRK") ;
 
-    if(job_config & 64)
         write_job = add_job(0, 99, (char *)job_class.c_str(), NULL, cycle, (char *)"data_record" , (char *)"TRK") ;
-
+        break ;
+    }
 }
 
 int Trick::DataRecordGroup::checkpoint() {
diff --git a/trick_source/sim_services/FrameLog/FrameDataRecordGroup.cpp b/trick_source/sim_services/FrameLog/FrameDataRecordGroup.cpp
index 2c18305d..d0923c21 100644
--- a/trick_source/sim_services/FrameLog/FrameDataRecordGroup.cpp
+++ b/trick_source/sim_services/FrameLog/FrameDataRecordGroup.cpp
@@ -9,7 +9,7 @@
 -# All instances get the end_of_frame frame_log_clear job.
 */
 Trick::FrameDataRecordGroup::FrameDataRecordGroup( int in_thread_id , std::string in_name )
- : Trick::DRBinary(in_name, false, 0x6F) , thread_id(in_thread_id ) {
+ : Trick::DRBinary(in_name, false, DR_Type::DR_Type_FrameLogDataRecord ), thread_id(in_thread_id ) { 
     if ( thread_id > 0 ) {
         add_job(thread_id, 1000, (char *)"top_of_frame", NULL, 1.0, (char *)"start_timer", (char *)"TRK", 1) ;
         // Frame logging uses phase 65533 in FrameLog.ccp. Stop the timer just before that.