Prepare dough: In a large mixing bowl, add milk, melted butter and eggs into a large bowl and stir to combine. Add sugar and yeast. Stir well and set aside until yeast starts to bubble.
Add 2 cups of flour and salt. Stir until combined. Add enough of the remaining flour, about 1/2 cup at a time, until dough forms a ball.
Turn dough out onto a lightly floured surface. Knead dough for 3 to 5 minutes, adding flour as needed, until no longer sticky. Cover dough and let rise for 1 hour or until doubled in size.
Prepare filling: Mix sugar and orange zest together with your finger tips (or use a fork). Stir in cardamom and set aside.
When dough is risen, punch down and knead out any air bubbles. Roll into a rectangle about 12x15 inches. Let the dough relax for a few minutes if it isn't wanting to roll out.
Spread softened butter over dough. Sprinkle with orange-sugar mixture, spreading evenly over dough.
Roll up from the long side and pinch the edges to seal. Cut the dough into three equal pieces, lengthwise. Carefully braid the strands together, twisting the layers outwards. If desired, cut the dough in half to create 2 loaves. Place on a lined baking sheet.
Egg wash: whisk egg and water together, brush over loaves.
Preheat oven to 375˚F.
Bake for 20-22 minutes or until golden brown.
Serve warm or at room temperature.