public static <E> E updateExposed(E original, E updated)
	{
		// Check for annotation
		if(original.getClass().getAnnotation(Updatable.class) == null)
			return original;
		
		// Iterate through parental structure
		Class<?> clazz = original.getClass();
		do
		{
			// Iterate through fields
			for(Field field : clazz.getDeclaredFields())
			{
				// Exposed?
				if(field.getAnnotation(Expose.class) == null)
					continue;
				
				// Set visible
				boolean previousVisibility = field.isAccessible();
				field.setAccessible(true);
				
				// Setup updater
				IUpdater updater = TypeUpdater.OBJECT_UPDATER;
				TypeUpdater updaterType = TypeUpdater.lookup.get(field.getType());
				if(updaterType != null)
					updater = updaterType.updater;
				
				// Update
				try
				{
					original = updater.update(original, updated, field);
				}catch(Throwable e)
				{
					// Warn
					if(JeTT.isDebugging())
						System.err.format("Could not update exposed field '%s'\n", field.getName());
				}
				
				// Restore visibility
				field.setAccessible(previousVisibility);
			}
		}while((clazz = clazz.getSuperclass()) != Object.class);
		
		// Return
		return original;
	}