Index: branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmbgc.F90
===================================================================
--- branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmbgc.F90	(revision 9434)
+++ branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmbgc.F90	(revision 9435)
@@ -249,6 +249,20 @@
       ENDIF
 
+      IF ( ln_phytobal .AND.                                      &
+         & ( ( ln_slchlnoninc .AND.( .NOT. ln_slchldiainc ) ).OR. &
+         &   ( ln_slchldiainc .AND.( .NOT. ln_slchlnoninc ) ) ) ) THEN
+         CALL ctl_stop( ' Cannot calculate phytoplankton balancing increments', &
+            &           ' unless assimilating all model PFTs,')
+      ENDIF
+
       IF ( ln_slphytotinc .AND. ( ln_slphydiainc .OR. ln_slphynoninc ) ) THEN
          CALL ctl_stop( ' Can only assimilate total or PFT surface phytoplankton carbon, not both' )
+      ENDIF
+
+      IF ( ln_phytobal .AND.                                      &
+         & ( ( ln_slphynoninc .AND.( .NOT. ln_slphydiainc ) ).OR. &
+         &   ( ln_slphydiainc .AND.( .NOT. ln_slphynoninc ) ) ) ) THEN
+         CALL ctl_stop( ' Cannot calculate phytoplankton balancing increments', &
+            &           ' unless assimilating all model PFTs,')
       ENDIF
 
@@ -905,4 +919,7 @@
 
          ! Un-log any log increments for passing to balancing routines
+         ! Remember that two sets of non-log increments should not be
+         ! expected to be in the same ratio as their log equivalents
+         
          ! Total chlorophyll
          IF ( ln_slchltotinc ) THEN
Index: branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmphyto2dbal_hadocc.F90
===================================================================
--- branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmphyto2dbal_hadocc.F90	(revision 9434)
+++ branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmphyto2dbal_hadocc.F90	(revision 9435)
@@ -117,15 +117,21 @@
       !!---------------------------------------------------------------------------
 
-      IF ( ld_chltot ) THEN
-         ! If p_maxchlinc > 0 then cap total absolute chlorophyll increment at that value
-         DO jj = 1, jpj
-            DO ji = 1, jpi
-               IF ( p_maxchlinc > 0.0 ) THEN
+      IF ( ( .NOT. ld_chltot ) .AND. ( .NOT. ld_phytot ) ) THEN
+         CALL ctl_stop( ' Trying to do phyto2d balancing but nothing to assimilate' )
+      ENDIF
+      
+      ! If p_maxchlinc > 0 then cap total absolute chlorophyll increment at that value
+      IF ( p_maxchlinc > 0.0 ) THEN
+         IF ( ld_chltot ) THEN
+            DO jj = 1, jpj
+               DO ji = 1, jpi
                   pinc_chltot(ji,jj) = MAX( -1.0 * p_maxchlinc, MIN( pinc_chltot(ji,jj), p_maxchlinc ) )
-               ENDIF
+               END DO
             END DO
-         END DO
-      ELSE
-         CALL ctl_stop( ' No PFT assimilation quite yet' )
+         ENDIF
+      ENDIF
+
+      IF ( ld_phytot ) THEN
+         CALL ctl_stop( ' No phytoplankton carbon assimilation quite yet' )
       ENDIF
       
Index: branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmphyto2dbal_medusa.F90
===================================================================
--- branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmphyto2dbal_medusa.F90	(revision 9434)
+++ branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmphyto2dbal_medusa.F90	(revision 9435)
@@ -130,4 +130,5 @@
       REAL(wp)                                              :: n2be_z         ! N:biomass for total zoo
       REAL(wp)                                              :: n2be_d         ! N:biomass for detritus
+      REAL(wp)                                              :: zfrac          ! Fraction
       REAL(wp)                                              :: zfrac_chn      ! Fraction of jpchn
       REAL(wp)                                              :: zfrac_chd      ! Fraction of jpchd
@@ -139,6 +140,8 @@
       REAL(wp)                                              :: zrat_chd_phd   ! Ratio of jpchd:jpphd
       REAL(wp)                                              :: zrat_chn_phn   ! Ratio of jpchn:jpphn
+      REAL(wp)                                              :: zrat_phn_chn   ! Ratio of jpphn:jpchn
+      REAL(wp)                                              :: zrat_phd_chd   ! Ratio of jpphd:jpchd
+      REAL(wp)                                              :: zrat_pds_chd   ! Ratio of jppds:jpchd
       REAL(wp)                                              :: zrat_dtc_det   ! Ratio of jpdtc:jpdet
-      REAL(wp),                DIMENSION(jpi,jpj)           :: medusa_chl     ! MEDUSA total chlorophyll
       REAL(wp),                DIMENSION(jpi,jpj)           :: cchl_p         ! C:Chl for total phy
       REAL(wp),                DIMENSION(16)                :: modparm        ! Model parameters
@@ -150,15 +153,43 @@
       !!---------------------------------------------------------------------------
 
-      IF ( ld_chltot ) THEN
-         ! If p_maxchlinc > 0 then cap total absolute chlorophyll increment at that value
-         DO jj = 1, jpj
-            DO ji = 1, jpi
-               IF ( p_maxchlinc > 0.0 ) THEN
+      ! If p_maxchlinc > 0 then cap total absolute chlorophyll increment at that value
+      IF ( p_maxchlinc > 0.0 ) THEN
+         IF ( ld_chltot ) THEN
+            DO jj = 1, jpj
+               DO ji = 1, jpi
                   pinc_chltot(ji,jj) = MAX( -1.0 * p_maxchlinc, MIN( pinc_chltot(ji,jj), p_maxchlinc ) )
-               ENDIF
-            END DO
-         END DO
-      ELSE
-         CALL ctl_stop( ' No PFT assimilation quite yet' )
+               END DO
+            END DO
+         ELSE IF ( ld_chldia .AND. ld_chlnon ) THEN
+            DO jj = 1, jpj
+               DO ji = 1, jpi
+                  pinc_chltot(ji,jj) = pinc_chldia(ji,jj) + pinc_chlnon(ji,jj)
+                  pinc_chltot(ji,jj) = MAX( -1.0 * p_maxchlinc, MIN( pinc_chltot(ji,jj), p_maxchlinc ) )
+                  IF ( pinc_chltot(ji,jj) .NE. ( pinc_chldia(ji,jj) + pinc_chlnon(ji,jj) ) ) THEN
+                     zfrac = pinc_chltot(ji,jj) / ( pinc_chldia(ji,jj) + pinc_chlnon(ji,jj) )
+                     pinc_chldia(ji,jj) = pinc_chldia(ji,jj) * zfrac
+                     pinc_chlnon(ji,jj) = pinc_chlnon(ji,jj) * zfrac
+                  ENDIF
+               END DO
+            END DO
+         ELSE IF ( ld_chldia ) THEN
+            DO jj = 1, jpj
+               DO ji = 1, jpi
+                  pinc_chldia(ji,jj) = MAX( -1.0 * p_maxchlinc, MIN( pinc_chldia(ji,jj), p_maxchlinc ) )
+                  pinc_chltot(ji,jj) = pinc_chldia(ji,jj)
+               END DO
+            END DO
+         ELSE IF ( ld_chlnon ) THEN
+            DO jj = 1, jpj
+               DO ji = 1, jpi
+                  pinc_chlnon(ji,jj) = MAX( -1.0 * p_maxchlinc, MIN( pinc_chlnon(ji,jj), p_maxchlinc ) )
+                  pinc_chltot(ji,jj) = pinc_chlnon(ji,jj)
+               END DO
+            END DO
+         ENDIF
+      ENDIF
+
+      IF ( ld_phytot .OR. ld_phydia .OR. ld_phynon ) THEN
+         CALL ctl_stop( ' No phytoplankton carbon assimilation quite yet' )
       ENDIF
       
@@ -263,13 +294,23 @@
                DO ji = 1, jpi
 
-                  IF ( ( tracer_bkg(ji,jj,jk,jpphn) > 0.0 ) .AND. ( tracer_bkg(ji,jj,jk,jpphd) > 0.0 ) ) THEN
-                     ! Phytoplankton nitrogen and silicate split up based on existing ratios
-                     zfrac_phn = tracer_bkg(ji,jj,jk,jpphn) / (tracer_bkg(ji,jj,jk,jpphn) + tracer_bkg(ji,jj,jk,jpphd))
-                     zfrac_phd = 1.0 - zfrac_phn
+                  ! Phytoplankton
+                  IF ( ( tracer_bkg(ji,jj,jk,jpphn) > 0.0 ) .AND. &
+                     & ( tracer_bkg(ji,jj,jk,jpphd) > 0.0 ) .AND. &
+                     & ( pinc_chltot(ji,jj) /= 0.0 ) ) THEN
+                     IF ( ld_chltot ) THEN
+                        ! Phytoplankton nitrogen split up based on existing ratios
+                        zfrac_phn = tracer_bkg(ji,jj,jk,jpphn) / &
+                           &        (tracer_bkg(ji,jj,jk,jpphn) + tracer_bkg(ji,jj,jk,jpphd))
+                        zfrac_phd = tracer_bkg(ji,jj,jk,jpphd) / &
+                           &        (tracer_bkg(ji,jj,jk,jpphn) + tracer_bkg(ji,jj,jk,jpphd))
+                     ELSE IF ( ld_chldia .AND. ld_chlnon ) THEN
+                        ! Phytoplankton nitrogen split up based on assimilation increments
+                        zfrac_phn = pinc_chlnon(ji,jj) / pinc_chltot(ji,jj)
+                        zfrac_phd = pinc_chldia(ji,jj) / pinc_chltot(ji,jj)
+                     ENDIF
+
+                     ! Phytoplankton silicate split up based on existing ratios
                      zrat_pds_phd = tracer_bkg(ji,jj,jk,jppds) / tracer_bkg(ji,jj,jk,jpphd)
-                     phyto2d_balinc(ji,jj,jk,jpphn) = outincs(ji,jj,jk,i_tracer(2)) * zfrac_phn
-                     phyto2d_balinc(ji,jj,jk,jpphd) = outincs(ji,jj,jk,i_tracer(2)) * zfrac_phd
-                     phyto2d_balinc(ji,jj,jk,jppds) = phyto2d_balinc(ji,jj,jk,jpphd) * zrat_pds_phd
-
+                     
                      ! Chlorophyll split up based on existing ratios to phytoplankton nitrogen
                      ! Not using pinc_chltot directly as it's only 2D
@@ -277,12 +318,18 @@
                      zrat_chn_phn = tracer_bkg(ji,jj,jk,jpchn) / tracer_bkg(ji,jj,jk,jpphn)
                      zrat_chd_phd = tracer_bkg(ji,jj,jk,jpchd) / tracer_bkg(ji,jj,jk,jpphd)
+                     
+                     phyto2d_balinc(ji,jj,jk,jpphn) = outincs(ji,jj,jk,i_tracer(2)) * zfrac_phn
+                     phyto2d_balinc(ji,jj,jk,jpphd) = outincs(ji,jj,jk,i_tracer(2)) * zfrac_phd
+                     phyto2d_balinc(ji,jj,jk,jppds) = phyto2d_balinc(ji,jj,jk,jpphd) * zrat_pds_phd
                      phyto2d_balinc(ji,jj,jk,jpchn) = phyto2d_balinc(ji,jj,jk,jpphn) * zrat_chn_phn
                      phyto2d_balinc(ji,jj,jk,jpchd) = phyto2d_balinc(ji,jj,jk,jpphd) * zrat_chd_phd
                   ENDIF
 
+                  ! Zooplankton nitrogen split up based on existing ratios
                   IF ( ( tracer_bkg(ji,jj,jk,jpzmi) > 0.0 ) .AND. ( tracer_bkg(ji,jj,jk,jpzme) > 0.0 ) ) THEN
-                     ! Zooplankton nitrogen split up based on existing ratios
-                     zfrac_zmi = tracer_bkg(ji,jj,jk,jpzmi) / (tracer_bkg(ji,jj,jk,jpzmi) + tracer_bkg(ji,jj,jk,jpzme))
-                     zfrac_zme = 1.0 - zfrac_zmi
+                     zfrac_zmi = tracer_bkg(ji,jj,jk,jpzmi) / &
+                        &        (tracer_bkg(ji,jj,jk,jpzmi) + tracer_bkg(ji,jj,jk,jpzme))
+                     zfrac_zme = tracer_bkg(ji,jj,jk,jpzme) / &
+                        &        (tracer_bkg(ji,jj,jk,jpzmi) + tracer_bkg(ji,jj,jk,jpzme))
                      phyto2d_balinc(ji,jj,jk,jpzmi) = outincs(ji,jj,jk,i_tracer(3)) * zfrac_zmi
                      phyto2d_balinc(ji,jj,jk,jpzme) = outincs(ji,jj,jk,i_tracer(3)) * zfrac_zme
@@ -306,6 +353,6 @@
                   ENDIF
 
+                  ! Carbon detritus based on existing ratios
                   IF ( ( tracer_bkg(ji,jj,jk,jpdet) > 0.0 ) .AND. ( tracer_bkg(ji,jj,jk,jpdtc) > 0.0 ) ) THEN
-                     ! Carbon detritus based on existing ratios
                      zrat_dtc_det = tracer_bkg(ji,jj,jk,jpdtc) / tracer_bkg(ji,jj,jk,jpdet)
                      phyto2d_balinc(ji,jj,jk,jpdtc) = phyto2d_balinc(ji,jj,jk,jpdet) * zrat_dtc_det
@@ -329,9 +376,33 @@
          DO jj = 1, jpj
             DO ji = 1, jpi
-               IF ( medusa_chl(ji,jj) > 0.0 ) THEN
-                  zfrac_chn = tracer_bkg(ji,jj,1,jpchn) / medusa_chl(ji,jj)
-                  zfrac_chd = 1.0 - zfrac_chn
-                  phyto2d_balinc(ji,jj,1,jpchn) = pinc_chltot(ji,jj) * zfrac_chn
-                  phyto2d_balinc(ji,jj,1,jpchd) = pinc_chltot(ji,jj) * zfrac_chd
+               IF ( ( tracer_bkg(ji,jj,1,jpchn) > 0.0 ) .AND. &
+                  & ( tracer_bkg(ji,jj,1,jpchd) > 0.0 ) ) THEN
+                  IF ( ld_chltot ) THEN
+                     ! Chlorophyll split up based on existing ratios
+                     zfrac_chn = tracer_bkg(ji,jj,1,jpchn) / &
+                        &        ( tracer_bkg(ji,jj,1,jpchn) + tracer_bkg(ji,jj,1,jpchd) )
+                     zfrac_chd = tracer_bkg(ji,jj,1,jpchd) / &
+                        &        ( tracer_bkg(ji,jj,1,jpchn) + tracer_bkg(ji,jj,1,jpchd) )
+                     phyto2d_balinc(ji,jj,1,jpchn) = pinc_chltot(ji,jj) * zfrac_chn
+                     phyto2d_balinc(ji,jj,1,jpchd) = pinc_chltot(ji,jj) * zfrac_chd
+                  ENDIF
+                  IF( ld_chldia ) THEN
+                     phyto2d_balinc(ji,jj,1,jpchd) = pinc_chldia(ji,jj)
+                  ENDIF
+                  IF( ld_chlnon ) THEN
+                     phyto2d_balinc(ji,jj,1,jpchn) = pinc_chlnon(ji,jj)
+                  ENDIF
+                  
+                  ! Maintain stoichiometric ratios of nitrogen and silicate
+                  IF ( ld_chltot .OR. ld_chlnon ) THEN
+                     zrat_phn_chn = tracer_bkg(ji,jj,1,jpphn) / tracer_bkg(ji,jj,1,jpchn)
+                     phyto2d_balinc(ji,jj,1,jpphn) = phyto2d_balinc(ji,jj,1,jpchn) * zrat_phn_chn
+                  ENDIF
+                  IF ( ld_chltot .OR. ld_chldia ) THEN
+                     zrat_phd_chd = tracer_bkg(ji,jj,1,jpphd) / tracer_bkg(ji,jj,1,jpchd)
+                     phyto2d_balinc(ji,jj,1,jpphd) = phyto2d_balinc(ji,jj,1,jpchd) * zrat_phd_chd
+                     zrat_pds_chd = tracer_bkg(ji,jj,1,jppds) / tracer_bkg(ji,jj,1,jpchd)
+                     phyto2d_balinc(ji,jj,1,jppds) = phyto2d_balinc(ji,jj,1,jpchd) * zrat_pds_chd
+                  ENDIF
                ENDIF
             END DO
@@ -354,4 +425,7 @@
                   phyto2d_balinc(ji,jj,jk,jpchn) = phyto2d_balinc(ji,jj,1,jpchn)
                   phyto2d_balinc(ji,jj,jk,jpchd) = phyto2d_balinc(ji,jj,1,jpchd)
+                  phyto2d_balinc(ji,jj,jk,jpphn) = phyto2d_balinc(ji,jj,1,jpphn)
+                  phyto2d_balinc(ji,jj,jk,jpphd) = phyto2d_balinc(ji,jj,1,jpphd)
+                  phyto2d_balinc(ji,jj,jk,jppds) = phyto2d_balinc(ji,jj,1,jppds)
                END DO
                !
@@ -360,7 +434,4 @@
 
          ! Set other balancing increments to zero
-         phyto2d_balinc(:,:,:,jpphn) = 0.0
-         phyto2d_balinc(:,:,:,jpphd) = 0.0
-         phyto2d_balinc(:,:,:,jppds) = 0.0
          phyto2d_balinc(:,:,:,jpzmi) = 0.0
          phyto2d_balinc(:,:,:,jpzme) = 0.0
