I have a method that returns an IEnumerable like this..
public virtual IEnumerable ToPages(){
// foreach logic
yield return pages;
// more
Your enumerable method will only execute once you actually try to access the members.
This is called "Deferred Execution" (see http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx)
Try actually accessing the IEnumerable which is returned, or just call;
var p = obj.ToPages().ToList();