Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13508)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13509)
@@ -45,4 +45,7 @@
 		if(strcmp(autodiff_driver,"fos_forward")==0){
 			parameters->AddObject(iomodel->CopyConstantObject(AutodiffFosForwardIndexEnum));
+		}
+		else if(strcmp(autodiff_driver,"fos_reverse")==0){
+			parameters->AddObject(iomodel->CopyConstantObject(AutodiffFosReverseIndexEnum));
 		}
 		else if(strcmp(autodiff_driver,"fov_forward")==0){
Index: /issm/trunk-jpl/src/m/classes/autodiff.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/autodiff.m	(revision 13508)
+++ /issm/trunk-jpl/src/m/classes/autodiff.m	(revision 13509)
@@ -121,4 +121,25 @@
 			end
 			%}}}
+			%if driver is fos_reverse, build index:  {{{
+			if strcmpi(obj.driver,'fos_reverse'),
+				index=0;
+				
+				for i=1:num_dependent_objects,
+					dep=obj.dependents{i};
+					if ~isnan(dep.fos_reverse_index),
+						index=index+dep.fos_reverse_index;
+						break;
+					else
+						if strcmpi(dep.type,'scalar'),
+							index=index+1;
+						else
+							index=index+dep.nods;
+						end
+					end
+				end
+				index=index-1; %get c-index numbering going
+				WriteData(fid,'data',index,'enum',AutodiffFosReverseIndexEnum(),'format','Integer'); 
+			end
+			%}}}
 			%if driver is fov_forward, build indices:  {{{
 			if strcmpi(obj.driver,'fov_forward'),
Index: /issm/trunk-jpl/src/m/classes/dependent.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/dependent.m	(revision 13508)
+++ /issm/trunk-jpl/src/m/classes/dependent.m	(revision 13509)
@@ -8,7 +8,9 @@
 		name                 = '';
 		type                 = '';
+		fos_reverse_index    = NaN;
 		exp                  = '';
 		segments             = [];
 		index                = -1;
+		nods                 = 0;
 	end
 	methods
@@ -23,4 +25,5 @@
 			 obj.segments=getfieldvalue(options,'segments',[]);
 			 obj.index=getfieldvalue(options,'index',-1);
+			 obj.nods=getfieldvalue(options,'nods',0);
 
 			 %if name is mass flux: 
@@ -49,4 +52,13 @@
 				end
 			end
+			if ~isnan(obj.fos_reverse_index),
+				if ~strcmpi(driver,'fos_reverse'),
+					error('cannot declare a dependent with a fos_reverse_index when the driver is not fos_reverse!');
+				end
+				if obj.nods==0,
+					error('ependent checkconsistency error: nods should be set to the size of the independent variable');
+				end
+
+			end
 
 		end % }}}
@@ -56,4 +68,8 @@
 			fielddisplay(obj,'name','variable name (must match corresponding Enum)');
 			fielddisplay(obj,'type','type of variable (''vertex'' or ''scalar'')');
+			
+			if ~isnan(obj.fos_reverse_index),
+				fielddisplay(obj,'fos_reverse_index','index for fos_reverse driver of ADOLC');
+			end
 			if ~isempty(obj.exp),
 				fielddisplay(obj,'exp','file needed to compute dependent variable');
