In a large pot, melt butter over medium heat. Add onions, celery, carrots, and garlic. Saute for approximately 7 to 10 minutes, or until vegetables begin to soften. Stir in broth, potatoes, salt and pepper. Bring to a boil, then reduce heat to a simmer. Cook partially covered for approximately 30 to 40 minutes, or until potatoes are tender.
Lightly spoon flour into a measuring cup; level with knife. Place flour in a small bowl and gradually add milk while constantly whisking to combine. When well blended, stir into potato mixture. Cook uncovered for an additional 15 to 20 minutes, or until soup is thick and creamy.
Ladle soup into individual bowls and sprinkle with cheese. Season to taste with salt and pepper.