Peel and dice the potatoes into approximately one-inch chunks.
Rinse the potatoes, place them in a bowl and cover with water.
Cut the bacon into approximately 1/2 inch strips or smaller.
Heat a skillet to medium heat, add the bacon and cook until brown and crispy.
Once the bacon is cooked, transfer it to a paper towel covered dish and sit it to the side.
Melt the butter in a large pan/dutch oven/pot.
Once melted add the onion and cook until it begins to slightly brown.
Whisk in the flour until lightly browned.
Whisk in the milk, heavy cream and chicken broth.
Pour the water from the potatoes and add them to the pot.
Cook the potatoes covered, at a slow rolling boil, for about 15-20 minutes or until fork-tender.
Once the potatoes are done, using a spoon mash some of the potatoes against the pot until you reach your desired consistency.
Stir in the cheese, sour cream and about half of your bacon.
Reduce the heat and simmer for a few minutes to allow the bacon to tenderize and flavor the soup.
Remove from the heat and serve topped with bacon, cheese, and green onion if desired.