In a large heavy bottom saucepan, sauté onion in butter or oil until soft but not brown, about 5 minutes. Add potatoes, fiddleheads, bay leaf, and enough chicken stock to make the vegetables just swim.
Bring to a boil, reduce heat, and barely simmer, partially covered, for one hour. Remove from heat and cool slightly. Remove bay leaf.
In a blender, process mixture in batches. (Can be prepared to this point a day or two ahead of time. Cool, cover and refrigerate.).
Return mixture to saucepan and slowly bring to a simmer, stirring frequently. Add milk, a little at a time, until it reaches the consistency you like. Add salt and pepper to taste. Serve in heated soup bowls, garnish as desired.