public void upgrade(OldTSpace.FieldRepTemplate inV, NewTSpace.FieldRepTemplate outV) {
			
			upgrade(inV as OldTSpace.TranslationBase, outV as NewTSpace.TranslationBase);
	
			outV.Imports = inV.Imports;	
			outV.Type = inV.Type;
			outV.Name = inV.Name;
			
			if (!String.IsNullOrEmpty(inV.Get))
				outV.Java = inV.Get;			
		}
		public void upgrade(OldTSpace.PropRepTemplate inV, NewTSpace.PropRepTemplate outV) {
			
			upgrade(inV as OldTSpace.FieldRepTemplate, outV as NewTSpace.FieldRepTemplate);
	
			outV.Imports = inV.Imports;	
			if (!String.IsNullOrEmpty(inV.Get))
				outV.JavaGet = inV.Get;			
		
			if (!String.IsNullOrEmpty(inV.Set))
				outV.JavaSet = inV.Set;			
		
		}
		public void upgrade(OldTSpace.CastRepTemplate inV, NewTSpace.CastRepTemplate outV) {
			
			upgrade(inV as OldTSpace.TranslationBase, outV as NewTSpace.TranslationBase);
	
			outV.Imports = inV.Imports;	
			if (!String.IsNullOrEmpty(inV.From))
				outV.From = inV.From;

			if (!String.IsNullOrEmpty(inV.To))
				outV.To = inV.To;
			
			if (!String.IsNullOrEmpty(inV.Java))
				outV.Java = inV.Java;			
		}
		public void upgrade(OldTSpace.ConstructorRepTemplate inV, NewTSpace.ConstructorRepTemplate outV) {
			
			upgrade(inV as OldTSpace.TranslationBase, outV as NewTSpace.TranslationBase);
	
			outV.Imports = inV.Imports;	
			if (!String.IsNullOrEmpty(inV.Java))
				outV.Java = inV.Java;			
			
			foreach (OldTSpace.ParamRepTemplate inP in inV.Params) {			
				NewTSpace.ParamRepTemplate outP = new NewTSpace.ParamRepTemplate();
				upgrade(inP, outP);
				outV.Params.Add(outP);
			}				
		}
		public void upgrade(OldTSpace.MethodRepTemplate inV, NewTSpace.MethodRepTemplate outV) {
			
			upgrade(inV as OldTSpace.ConstructorRepTemplate, outV as NewTSpace.ConstructorRepTemplate);
	
			outV.Name = inV.Name;
			// Methods should have a return type, but in at least one case don't ... 
			outV.Return = inV.Return ?? "System.Void";
			
		}
		public void upgrade(OldTSpace.TranslationBase inV, NewTSpace.TranslationBase outV) {
			outV.SurroundingTypeName = inProgress.TypeName;
			// Nothing else to do,  OldTSpace.TranslationBase has nothing
		}
		public void upgrade(OldTSpace.ParamRepTemplate inV, NewTSpace.ParamRepTemplate outV) {
			outV.Type = inV.Type;
			outV.Name = inV.Name;
		}
		public NewTSpace.TypeRepTemplate upgrade (OldTSpace.TypeRepTemplate inTemplate)
		{
			inProgress = inTemplate;
			
			OldTSpace.StructRepTemplate strukt = inTemplate as OldTSpace.StructRepTemplate;
			if (strukt != null) {
			    NewTSpace.StructRepTemplate res = new NewTSpace.StructRepTemplate();
				upgrade(strukt, res);
				return res;
			}
			OldTSpace.ClassRepTemplate klass = inTemplate as OldTSpace.ClassRepTemplate;
			if (klass != null) {
			    NewTSpace.ClassRepTemplate res = new NewTSpace.ClassRepTemplate();
				upgrade(klass, res);
				return res;
			}
			OldTSpace.InterfaceRepTemplate iface = inTemplate as OldTSpace.InterfaceRepTemplate;
			if (iface != null) {
			    NewTSpace.InterfaceRepTemplate res = new NewTSpace.InterfaceRepTemplate();
				upgrade(iface, res);
				return res;
			}

			throw new System.NotImplementedException(inTemplate.GetType().ToString());
		}
		public void upgrade(OldTSpace.StructRepTemplate inV, NewTSpace.StructRepTemplate outV) {
			upgrade(inV, outV);
		}
		public void upgrade(OldTSpace.ClassRepTemplate inV, NewTSpace.ClassRepTemplate outV) {
			upgrade(inV as OldTSpace.TypeRepTemplate, outV as NewTSpace.InterfaceRepTemplate);
		
			foreach (OldTSpace.ConstructorRepTemplate inC in inV.Constructors) {			
				NewTSpace.ConstructorRepTemplate outC = new NewTSpace.ConstructorRepTemplate();
				upgrade(inC, outC);
				outV.Constructors.Add(outC);
			}		
			foreach (OldTSpace.FieldRepTemplate inF in inV.Fields) {			
				NewTSpace.FieldRepTemplate outF = new NewTSpace.FieldRepTemplate();
				upgrade(inF, outF);
				outV.Fields.Add(outF);
			}		
			foreach (OldTSpace.CastRepTemplate inC in inV.Casts) {			
				NewTSpace.CastRepTemplate outC = new NewTSpace.CastRepTemplate();
				upgrade(inC, outC);
				outV.Casts.Add(outC);
			}		
			
		}
		public void upgrade(OldTSpace.TypeRepTemplate inV, NewTSpace.InterfaceRepTemplate outV) {
			
			upgrade(inV as OldTSpace.TypeRepTemplate, outV as NewTSpace.TypeRepTemplate);
	
			outV.Inherits = inV.Inherits;
			outV.Imports = inV.Imports;	
			if (!String.IsNullOrEmpty(inV.Java))
				outV.Java = inV.Java;			
			
			
			foreach (OldTSpace.MethodRepTemplate inM in inV.Methods) {			
				NewTSpace.MethodRepTemplate outM = new NewTSpace.MethodRepTemplate();
				upgrade(inM, outM);
				outV.Methods.Add(outM);
			}		

			foreach (OldTSpace.PropRepTemplate inP in inV.Properties) {			
				NewTSpace.PropRepTemplate outP = new NewTSpace.PropRepTemplate();
				upgrade(inP, outP);
				outV.Properties.Add(outP);
			}		

		}
		public void upgrade(OldTSpace.TypeRepTemplate inV, NewTSpace.TypeRepTemplate outV) {
			
			upgrade(inV as OldTSpace.TranslationBase, outV as NewTSpace.TranslationBase);
	
			outV.TypeName = inV.TypeName;
			
			outV.Uses = inV.NamespacePath;
		}