diff --git a/src/fe/map.c b/src/fe/map.c
index b721b6483efaf9756534c4694ddb8e699a322df6..21de46baa496ade6e54b1b3a5be31aca19c28905 100644
--- a/src/fe/map.c
+++ b/src/fe/map.c
@@ -105,6 +105,11 @@ mapPciModules( CDS_HARDWARE* pCds )
     dacdev = NULL;
     status = 0;
 
+    // initialize dac duotone multipliers/divisors in case
+    // we don't have one or the other of DAC or ADC cards
+    pCds->adcDuoToneDivisor[ 0 ] = 1;
+    pCds->dacDuoToneMultiplier[ 0 ] = 1;
+
    modCount = map_cards_2_slots ( &cdsPciModules ) ;
 
     // Map and Initialize ADC and DAC modules
diff --git a/src/include/drv/cdsHardware.h b/src/include/drv/cdsHardware.h
index 0adea57f0418f95c837e97ac7b9e1a966be40553..031204a88744781d53b1832b3ef0c9b1cfdcd0f6 100644
--- a/src/include/drv/cdsHardware.h
+++ b/src/include/drv/cdsHardware.h
@@ -209,6 +209,7 @@ typedef struct CDS_HARDWARE{
 	int dacCount;			/* Number of DAC modules found 		*/
 	long pci_dac[MAX_DAC_MODULES];	/* Remapped addresses of DAC modules	*/
 	int dacType[MAX_DAC_MODULES];
+        int dacDuoToneMultiplier[MAX_DAC_MODULES]; /* scale amplitude of duotone up for higher bit DACs */
 	int dacInstance[MAX_DAC_MODULES];
 	int dacSlot[MAX_DAC_MODULES];
 	int dacConfig[MAX_DAC_MODULES];
@@ -217,6 +218,7 @@ typedef struct CDS_HARDWARE{
 	int adcCount;			/* Number of ADC modules found		*/
 	long pci_adc[MAX_ADC_MODULES];	/* Remapped addresses of ADC modules	*/
 	int adcType[MAX_ADC_MODULES];
+        int adcDuoToneDivisor[MAX_ADC_MODULES]; /* scale amplitude of duotone down for higher bit ADCs */
 	int adcInstance[MAX_ADC_MODULES];
 	int adcSlot[MAX_ADC_MODULES];
     int adcChannels[MAX_ADC_MODULES];
diff --git a/src/include/drv/gsc16ai64.c b/src/include/drv/gsc16ai64.c
index 4ed938afa6c98eb2cd5b5352337af21eeae22a21..43d7e848d3d5fdcb98ddc39ba3252717f7e5a69f 100644
--- a/src/include/drv/gsc16ai64.c
+++ b/src/include/drv/gsc16ai64.c
@@ -121,6 +121,7 @@ gsc16ai64Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev )
     pHardware->pci_adc[ devNum ] =
         (long)pci_alloc_consistent( adcdev, 0x2000, &adc_dma_handle[ devNum ] );
     pHardware->adcType[ devNum ] = GSC_16AI64SSA;
+    pHardware->adcDuoToneDivisor[ devNum ] = 1;
     pHardware->adcInstance[ devNum ] = pHardware->card_count[ GSC_16AI64SSA ];
     pHardware->card_count[ GSC_16AI64SSA ] ++;
     pHardware->adcChannels[ devNum ] = GSAI_CHAN_COUNT;
diff --git a/src/include/drv/gsc16ao16.c b/src/include/drv/gsc16ao16.c
index 7bc79a5a4412aa72893f4d43357cd75dfaa7a08f..db7618560689e7c375a48b6d6a7c33913582bf44 100644
--- a/src/include/drv/gsc16ao16.c
+++ b/src/include/drv/gsc16ao16.c
@@ -80,6 +80,7 @@ gsc16ao16Init( CDS_HARDWARE* pHardware, struct pci_dev* dacdev )
         (long)pci_alloc_consistent( dacdev, 0x200, &dac_dma_handle[ devNum ] );
     pHardware->dacAcr[ devNum ] = (int)( _dacPtr[ devNum ]->ASSC );
     pHardware->dacType[ devNum ] = GSC_16AO16;
+    pHardware->dacDuoToneMultiplier[ devNum ] = 1;
     pHardware->dacCount++;
     pHardware->dacInstance[ devNum ] =  pHardware->card_count[ GSC_16AO16 ];
     pHardware->card_count[ GSC_16AO16 ] ++;
diff --git a/src/include/drv/gsc18ai32.c b/src/include/drv/gsc18ai32.c
index 54bfb14b715c26b1948f3e1eae9358da9ff28db2..0ef1130e3a142feede24e43984ff3a2bebe92d36 100644
--- a/src/include/drv/gsc18ai32.c
+++ b/src/include/drv/gsc18ai32.c
@@ -135,6 +135,7 @@ gsc18ai32Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev )
     pHardware->pci_adc[ devNum ] =
         (long)pci_alloc_consistent( adcdev, 0x2000, &adc_dma_handle[ devNum ] );
     pHardware->adcType[ devNum ] = GSC_18AI32SSC1M;
+    pHardware->adcDuoToneDivisor[ devNum ] = 4;
     pHardware->adcInstance[ devNum ] = pHardware->card_count[ GSC_18AI32SSC1M ];
     pHardware->card_count[ GSC_18AI32SSC1M ] ++;
     pHardware->adcConfig[ devNum ] |= autocal;
diff --git a/src/include/drv/gsc18ai64.c b/src/include/drv/gsc18ai64.c
index a1acc278447b1aa8500cc17aed14ed80c35a6d9c..0815bbe3cfbdfac0f1411a1f1073feb32b84036b 100644
--- a/src/include/drv/gsc18ai64.c
+++ b/src/include/drv/gsc18ai64.c
@@ -126,6 +126,7 @@ gsc18ai64Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev )
     pHardware->pci_adc[ devNum ] =
         (long)pci_alloc_consistent( adcdev, 0x2000, &adc_dma_handle[ devNum ] );
     pHardware->adcType[ devNum ] = GSC_18AI64SSC;
+    pHardware->adcDuoToneDivisor[ devNum ] = 4;
     pHardware->adcInstance[ devNum ] = pHardware->card_count[ GSC_18AI64SSC ];
     pHardware->card_count[ GSC_18AI64SSC ] ++;
     pHardware->adcConfig[ devNum ] = adc18Ptr->ASSC;
diff --git a/src/include/drv/gsc18ao8.c b/src/include/drv/gsc18ao8.c
index 9031b0a9884f92fb3d496c3b1888e4a8e5522be4..e1442150e66c40f3d3c6ec7675422f768c9c1120 100644
--- a/src/include/drv/gsc18ao8.c
+++ b/src/include/drv/gsc18ao8.c
@@ -115,6 +115,7 @@ gsc18ao8Init( CDS_HARDWARE* pHardware, struct pci_dev* dacdev )
         (long)pci_alloc_consistent( dacdev, 0x200, &dac_dma_handle[ devNum ] );
     pHardware->dacAcr[ devNum ] |= ((int)( dac18bitPtr->ASY_CONFIG ) & DAC_ACR_MASK);
     pHardware->dacType[ devNum ] = GSC_18AO8;
+    pHardware->dacDuoToneMultiplier[ devNum ] = 4;
     pHardware->dacCount++;
     pHardware->dacInstance[ devNum ] = pHardware->card_count[ GSC_18AO8 ];
     pHardware->card_count[ GSC_18AO8 ] ++;
diff --git a/src/include/drv/gsc20ao8.c b/src/include/drv/gsc20ao8.c
index 2b22bd4dbf3ebf7242fac3470ae19fc36e88d528..04e7bf8c2bf375cffaee82f33fdf2fab86273311 100644
--- a/src/include/drv/gsc20ao8.c
+++ b/src/include/drv/gsc20ao8.c
@@ -135,6 +135,7 @@ gsc20ao8Init( CDS_HARDWARE* pHardware, struct pci_dev* dacdev )
 
     // Return the device type to main code.
     pHardware->dacType[ devNum ] = GSC_20AO8;
+    pHardware->dacDuoToneMultiplier[ devNum ] = 8;
     pHardware->dacCount++;
     pHardware->dacInstance[ devNum ] = pHardware->card_count[ GSC_20AO8 ];
     pHardware->card_count[ GSC_20AO8 ] ++;
diff --git a/src/include/drv/iop_dac_functions.c b/src/include/drv/iop_dac_functions.c
index e6537656b665699a4f3429ffd9861f4bcc4fa16a..ed46935d3ca620183bc69383277f97b435edf1de 100644
--- a/src/include/drv/iop_dac_functions.c
+++ b/src/include/drv/iop_dac_functions.c
@@ -156,7 +156,8 @@ iop_dac_write(  )
                 if ( ( dt_diag.dacDuoEnable ) && ( chan == ( num_outs - 1 ) ) &&
                      ( card == 0 ) )
                 {
-                    dac_out = adcinfo.adcData[ 0 ][ ADC_DUOTONE_CHAN ];
+                    dac_out = adcinfo.adcData[ 0 ][ ADC_DUOTONE_CHAN ]
+                        * cdsPciModules.dacDuoToneMultiplier[0] / cdsPciModules.adcDuoToneDivisor[0];
                 }
 // Code below is only for use in DAQ test system.
 #ifdef DIAG_TEST