diff --git a/src/epics/util/feCodeGen.pl b/src/epics/util/feCodeGen.pl
index d7b5f38c01936ee25659957582d8bfedab62a76f..82ed1f28d3616e36dba35433a5ee17e10f6c9350 100755
--- a/src/epics/util/feCodeGen.pl
+++ b/src/epics/util/feCodeGen.pl
@@ -2207,7 +2207,7 @@ close($fg);
 
 for($ii=0;$ii<$adcCnt;$ii++)
 {
-   ("CDS::Adc::createAdcMedm") -> ($epicsScreensDir,$sysname,$usite,$dcuId,$medmTarget,$ii,@adcScreen);
+   ("CDS::Adc::createAdcMedm") -> ($epicsScreensDir,$sysname,$adcMaster,$usite,$dcuId,$medmTarget,$ii,@adcScreen);
 }
 # ******************************************************************************************
 #//		- GENERATE DAC SCREENS
diff --git a/src/epics/util/lib/Adc.pm b/src/epics/util/lib/Adc.pm
index 31b118ba1fd072dc82867e993107360f1ec1d74e..ee8dfbbfa06463a0f5bb9c25ffecddabbd8788f6 100644
--- a/src/epics/util/lib/Adc.pm
+++ b/src/epics/util/lib/Adc.pm
@@ -172,7 +172,7 @@ sub frontEndCode {
 #// This code requires /lib/medmGen.pm \n\n
 sub createAdcMedm
 {
-        my ($medmDir,$mdlName,$site,$dcuid,$medmTarget,$adcNum,@adcChannel) = @_;
+        my ($medmDir,$mdlName,$adcMaster,$site,$dcuid,$medmTarget,$adcNum,@adcChannel) = @_;
  # Define colors to be sent to screen gen.
         my %ecolors = ( "white" => "0",
              "black" => "14",
@@ -195,7 +195,7 @@ sub createAdcMedm
         print "creating file $medmDir\/$fname \n";
         open(OUTMEDM, ">$medmDir/$fname") || die "cannot open $medmDir/$fname for writing ";
 
-        my $xpos = 0; my $ypos = 0; my $width = 1000; my $height = 440;
+        my $xpos = 0; my $ypos = 0; my $width = 1000; my $height = 550;
         $medmdata = ("CDS::medmGen::medmGenFile") -> ($medmDir,$file,$width,$height);
 
 	# ************* Create Banner ******************************************************************************
@@ -272,6 +272,34 @@ sub createAdcMedm
 		}
 		$ypos += 20;
 	}
+#Add ADC Status Info
+    $xpos = 13; $ypos = 435; $width = 975; $height = 110;
+    $medmdata .= ("CDS::medmGen::medmGenRectangle") -> ($xpos,$ypos,$width,$height,$ecolors{gray},"","","");
+    $xpos = 50; $ypos = 440; $width = 140; $height = 15;
+	$medmdata .= ("CDS::medmGen::medmGenText") -> ($xpos,$ypos,$width,$height,"ADC STATUS",$ecolors{black});
+
+    $xpos = 60; $ypos = 460; $width = 140; $height = 15;
+	$medmdata .= ("CDS::medmGen::medmGenText") -> ($xpos,$ypos,$width,$height,"ADC MAPPED",$ecolors{black});
+    $xpos = 60; $ypos = 480; $width = 140; $height = 15;
+	$medmdata .= ("CDS::medmGen::medmGenText") -> ($xpos,$ypos,$width,$height,"ADC CHANNEL HOP",$ecolors{black});
+    $xpos = 60; $ypos = 500; $width = 140; $height = 15;
+	$medmdata .= ("CDS::medmGen::medmGenText") -> ($xpos,$ypos,$width,$height,"ADC OVERFLOW ",$ecolors{black});
+    if($adcMaster == 1) {
+    $xpos = 60; $ypos = 520; $width = 140; $height = 15;
+	$medmdata .= ("CDS::medmGen::medmGenText") -> ($xpos,$ypos,$width,$height,"ADC AUTOCAL ",$ecolors{black});
+    }
+
+    $xpos = 250; $ypos = 460; $width = 40; $height = 15;
+    $medmdata .= ("CDS::medmGen::medmGenByte") -> ($xpos,$ypos,$width,$height,"$site\:FEC-$dcuid\_ADC_STAT_$adcNum","0","0",$ecolors{green},$ecolors{red});
+    $xpos = 250; $ypos = 480; $width = 40; $height = 15;
+    $medmdata .= ("CDS::medmGen::medmGenByte") -> ($xpos,$ypos,$width,$height,"$site\:FEC-$dcuid\_ADC_STAT_$adcNum","1","1",$ecolors{green},$ecolors{red});
+    $xpos = 250; $ypos = 500; $width = 40; $height = 15;
+    $medmdata .= ("CDS::medmGen::medmGenByte") -> ($xpos,$ypos,$width,$height,"$site\:FEC-$dcuid\_ADC_STAT_$adcNum","2","2",$ecolors{green},$ecolors{red});
+
+    if($adcMaster == 1) {
+    $xpos = 250; $ypos = 520; $width = 40; $height = 15;
+    $medmdata .= ("CDS::medmGen::medmGenByte") -> ($xpos,$ypos,$width,$height,"$site\:FEC-$dcuid\_ADC_STAT_$adcNum","3","3",$ecolors{green},$ecolors{red});
+    }
 
 print OUTMEDM "$medmdata \n";
 close OUTMEDM;
diff --git a/src/epics/util/lib/medmGenGdsTp.pm b/src/epics/util/lib/medmGenGdsTp.pm
index 18467c77d580514842ace1eb09cc6ac4b24c3665..d09d5e38e454dec5bf724b10069477cb9bb253ff 100644
--- a/src/epics/util/lib/medmGenGdsTp.pm
+++ b/src/epics/util/lib/medmGenGdsTp.pm
@@ -435,11 +435,18 @@ sub createGdsMedm
 	$mdlNamelc = lc($mdlName);
 	$xpos = 205; $ypos = 200; $width = 40; $height = 20;
 	$bxpos = 255; $bypos = 201; $bwidth = 21; $bheight = 18;
+    if($adcMaster == 1) {
+	$bxpos = 255; $bypos = 201; $bwidth = 28; $bheight = 18;
+    }
 	for($ii=0;$ii<$adcCnt;$ii++)
 	{
 		$relDisp = "$medmTarget\/$mdlNamelc\/$mdlName\_MONITOR_ADC$::adcCardNum[$ii].adl";
         	$medmdata .= ("CDS::medmGen::medmGenRelDisp") -> ($xpos,$ypos,$width,$height,$relDisp,$ecolors{white},$ecolors{brown},"A$::adcCardNum[$ii]");
+    if($adcMaster == 1) {
+		$medmdata .= ("CDS::medmGen::medmGenByte") -> ($bxpos,$bypos,$bwidth,$bheight,"$site\:FEC-$dcuid\_ADC_STAT_$ii","0","3",$ecolors{green},$ecolors{red});
+    } else {
 		$medmdata .= ("CDS::medmGen::medmGenByte") -> ($bxpos,$bypos,$bwidth,$bheight,"$site\:FEC-$dcuid\_ADC_STAT_$ii","0","2",$ecolors{green},$ecolors{red});
+    }
 		$ypos += 22;
 		$bypos += 22;
 		$totalCards ++;
diff --git a/src/fe/map.c b/src/fe/map.c
index 6748d207445cd926841ac03666f9faf2645aa811..0aa492e590fab1e0179dfc67ced20608aed15d99 100644
--- a/src/fe/map.c
+++ b/src/fe/map.c
@@ -110,11 +110,12 @@ mapPciModules( CDS_HARDWARE* pCds )
             }
             if ( use_it )
             {
-                printk( "18-bit dac card on bus %x; device %x\n",
-                        dacdev->bus->number,
-                        PCI_SLOT( dacdev->devfn ) );
                 status = gsc18ao8Init( pCds, dacdev );
                 modCount++;
+                printk( "18-bit dac card on bus %x; device %x status %d\n",
+                        dacdev->bus->number,
+                        PCI_SLOT( dacdev->devfn ),
+                        status );
             }
             dac_18bit_cnt++;
         }
@@ -139,11 +140,12 @@ mapPciModules( CDS_HARDWARE* pCds )
             }
             if ( use_it )
             {
-                printk( "20-bit dac card on bus %x; device %x\n",
-                        dacdev->bus->number,
-                        PCI_SLOT( dacdev->devfn ) );
                 status = gsc20ao8Init( pCds, dacdev );
                 modCount++;
+                printk( "20-bit dac card on bus %x; device %x status %d\n",
+                        dacdev->bus->number,
+                        PCI_SLOT( dacdev->devfn ),
+                        status );
             }
             dac_20bit_cnt++;
         }
@@ -173,11 +175,12 @@ mapPciModules( CDS_HARDWARE* pCds )
             }
             if ( use_it )
             {
-                printk( "dac card on bus %x; device %x\n",
-                        dacdev->bus->number,
-                        PCI_SLOT( dacdev->devfn ) );
                 status = gsc16ao16Init( pCds, dacdev );
                 modCount++;
+                printk( "16 bit dac card on bus %x; device %x status %d\n",
+                        dacdev->bus->number,
+                        PCI_SLOT( dacdev->devfn ),
+                        status );
             }
             dac_cnt++;
         }
@@ -208,13 +211,12 @@ mapPciModules( CDS_HARDWARE* pCds )
             }
             if ( use_it )
             {
-                /*printk("adc card on bus %x; device %x prim %x\n",
-                      dacdev->bus->number,
-                      PCI_SLOT(dacdev->devfn),
-                      dacdev->bus->secondary);
-                      */
                 status = gsc16ai64Init( pCds, dacdev );
                 modCount++;
+                printk("adc card on bus %x; device %x status %d\n",
+                      dacdev->bus->number,
+                      PCI_SLOT(dacdev->devfn),
+                      status);
             }
             adc_cnt++;
         }
diff --git a/src/include/drv/adc_info.c b/src/include/drv/adc_info.c
index e47c0533520aa07c490415bd4aa59a33c0cea410..6a3d81fff495815fd8c2d9ed00590e104b7a67c8 100644
--- a/src/include/drv/adc_info.c
+++ b/src/include/drv/adc_info.c
@@ -11,22 +11,22 @@ adc_status_update( adcInfo_t* adcinfo )
         // SET/CLR Channel Hopping Error
         if ( adcinfo->adcChanErr[ jj ] )
         {
-            pLocalEpics->epicsOutput.statAdc[ jj ] &= ~( 2 );
+            pLocalEpics->epicsOutput.statAdc[ jj ] &= ~( ADC_CHAN_HOP );
             status |= FE_ERROR_ADC;
             ;
         }
         else
-            pLocalEpics->epicsOutput.statAdc[ jj ] |= 2;
+            pLocalEpics->epicsOutput.statAdc[ jj ] |= ADC_CHAN_HOP;
         adcinfo->adcChanErr[ jj ] = 0;
         // SET/CLR Overflow Error
         if ( adcinfo->adcOF[ jj ] )
         {
-            pLocalEpics->epicsOutput.statAdc[ jj ] &= ~( 4 );
+            pLocalEpics->epicsOutput.statAdc[ jj ] &= ~( ADC_OVERFLOW );
             status |= FE_ERROR_OVERFLOW;
             ;
         }
         else
-            pLocalEpics->epicsOutput.statAdc[ jj ] |= 4;
+            pLocalEpics->epicsOutput.statAdc[ jj ] |= ADC_OVERFLOW;
         adcinfo->adcOF[ jj ] = 0;
         for ( ii = 0; ii < 32; ii++ )
         {
diff --git a/src/include/drv/app_adc_read.c b/src/include/drv/app_adc_read.c
index 794fcf077ee4c5f3bc9665e50cb5edfff261d440..6f9af1b8c8a950a45949a34e493a9bc203ff0f52 100644
--- a/src/include/drv/app_adc_read.c
+++ b/src/include/drv/app_adc_read.c
@@ -82,22 +82,22 @@ app_adc_status_update( adcInfo_t* adcinfo )
         // SET/CLR Channel Hopping Error
         if ( adcinfo->adcChanErr[ jj ] )
         {
-            pLocalEpics->epicsOutput.statAdc[ jj ] &= ~( 2 );
+            pLocalEpics->epicsOutput.statAdc[ jj ] &= ~( ADC_CHAN_HOP );
             status |= FE_ERROR_ADC;
             ;
         }
         else
-            pLocalEpics->epicsOutput.statAdc[ jj ] |= 2;
+            pLocalEpics->epicsOutput.statAdc[ jj ] |= ADC_CHAN_HOP;
         adcinfo->adcChanErr[ jj ] = 0;
         // SET/CLR Overflow Error
         if ( adcinfo->adcOF[ jj ] )
         {
-            pLocalEpics->epicsOutput.statAdc[ jj ] &= ~( 4 );
+            pLocalEpics->epicsOutput.statAdc[ jj ] &= ~( ADC_OVERFLOW );
             status |= FE_ERROR_OVERFLOW;
             ;
         }
         else
-            pLocalEpics->epicsOutput.statAdc[ jj ] |= 4;
+            pLocalEpics->epicsOutput.statAdc[ jj ] |= ADC_OVERFLOW;
         adcinfo->adcOF[ jj ] = 0;
         for ( ii = 0; ii < 32; ii++ )
         {
diff --git a/src/include/drv/cdsHardware.h b/src/include/drv/cdsHardware.h
index c41019bdacddec63c32ba804d57ed4cb61e5f9e0..9fef3c31a89dbecdf35a3368be47759e62fa8baf 100644
--- a/src/include/drv/cdsHardware.h
+++ b/src/include/drv/cdsHardware.h
@@ -86,6 +86,11 @@ typedef struct CDS_REMOTE_NODES {
 #define DAC_DUOTONE_CHAN	30
 #define ADC_BUS_DELAY		1
 #define ADC_SHORT_CYCLE		2
+#define ADC_MAPPED  		1
+#define ADC_CHAN_HOP  		2
+#define ADC_OVERFLOW  		4
+#define ADC_CAL_PASS  		8
+
 
 typedef struct MEM_DATA_BLOCK{
 	int timeSec;
diff --git a/src/include/drv/gsc16ai64.c b/src/include/drv/gsc16ai64.c
index b0df4c1cb56a727cc35dd79c51a356f129b4ef6c..686c655d9dafdf14716c97c25f888c37275066f8 100644
--- a/src/include/drv/gsc16ai64.c
+++ b/src/include/drv/gsc16ai64.c
@@ -33,6 +33,7 @@ gsc16ai64Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev )
     char* _adc_add; /// @param *_adc_add ADC register address space
     int   pedStatus; /// @param pedStatus Status return from call to enable
                    /// device.
+    int autocal = 0;
 
     /// Get index into CDS_HARDWARE struct based on total number of ADC cards
     /// found by mapping routine in map.c
@@ -90,7 +91,17 @@ gsc16ai64Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev )
     /// Wait for internal calibration to complete.
     do
     {
+        autocal ++;
+        udelay(100);
     } while ( ( adcPtr[ devNum ]->BCR & GSAI_AUTO_CAL ) != 0 );
+    if( ( adcPtr[ devNum ]->BCR & GSAI_AUTO_CAL_PASS ) == 0 )
+    {
+        printk("ADC AUTOCAL FAIL %d\n",autocal);
+        autocal = 0;
+    } else {
+        printk("ADC AUTOCAL PASS %d\n",autocal);
+        autocal = GSAI_AUTO_CAL_PASS;
+    }
     adcPtr[ devNum ]->RAG |= GSAI_SAMPLE_START;
     adcPtr[ devNum ]->IDBC = ( GSAI_CLEAR_BUFFER | GSAI_THRESHOLD );
     adcPtr[ devNum ]->SSC = ( GSAI_64_CHANNEL | GSAI_EXTERNAL_SYNC );
@@ -102,6 +113,7 @@ gsc16ai64Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev )
     pHardware->adcType[ devNum ] = GSC_16AI64SSA;
     pHardware->adcChannels[ devNum ] = GSAI_CHAN_COUNT;
     pHardware->adcConfig[ devNum ] = adcPtr[ devNum ]->ASSC;
+    pHardware->adcConfig[ devNum ] |= autocal;
     pHardware->adcCount++;
     /// Return board enable status.
     return ( pedStatus );
diff --git a/src/include/drv/gsc16ai64.h b/src/include/drv/gsc16ai64.h
index f26d173619c5f3eb435210e25c2d606b39e1413f..ccaa86ddc82605b3c02099f6ac5e169bd780768c 100644
--- a/src/include/drv/gsc16ai64.h
+++ b/src/include/drv/gsc16ai64.h
@@ -55,6 +55,7 @@ typedef struct GSA_ADC_REG{
 #define GSAI_CLEAR_BUFFER       0x40000
 #define GSAI_THRESHOLD          0x001f
 #define GSAI_AUTO_CAL           0x2000
+#define GSAI_AUTO_CAL_PASS      0x4000
 #define GSAI_DMA_DEMAND_MODE    0x80000
 #define GSAI_18BIT_DATA         0x100000
 #define GSAI_DATA_CODE_OFFSET   0x8000
diff --git a/src/include/drv/iop_adc_functions.c b/src/include/drv/iop_adc_functions.c
index 8046b049dd98f92d164d15b0016f06b39625a71a..a3428cd99c76289f0ed7afed1d7b59d78ede454d 100644
--- a/src/include/drv/iop_adc_functions.c
+++ b/src/include/drv/iop_adc_functions.c
@@ -38,7 +38,10 @@ iop_adc_init( adcInfo_t* adcinfo )
         // ie no upper bits should be set in channel 31.
         *adcDummyData = DUMMY_ADC_VAL;
         // Set ADC Present Flag
-        pLocalEpics->epicsOutput.statAdc[ jj ] = 1;
+        pLocalEpics->epicsOutput.statAdc[ jj ] = ADC_MAPPED;
+        // Set ADC AutoCal Pass/Fail Flag
+        if((cdsPciModules.adcConfig [ jj ] & GSAI_AUTO_CAL_PASS) != 0) 
+            pLocalEpics->epicsOutput.statAdc[ jj ] |= ADC_CAL_PASS;
         // Reset Diag Info
         adcinfo->adcRdTimeErr[ jj ] = 0;
         adcinfo->adcChanErr[ jj ] = 0;