In a bowl, mix together the milk, two tablespoons of sugar, and yeast together. Set aside for 5 minutes to proof. The milk should form a thick layer of foam on top.
In a mixing bowl, mix together the remaining sugar, flour, baking powder, and salt together.
Mix in the yeast mixture, egg, and melted butter. Mix until the dough starts to come together. It may look very moist and clumpy, but do not add more flour.
Switch to a dough hook and knead for 8 - 10 minutes.
Cover with a plastic wrap and allow to double in size for about an hour.
While you wait, mix together the ingredients for the filling.
Once the dough is doubled in size, gently punch down the dough and turn out the dough onto a lightly floured surface. Roll the dough until it is about 16 x 20 inches and spread the filling evenly throughout, including the edges.
Cut the dough along the long side into five even strips. Take one of the strips and tightly roll. Once you reach the end of the strip, use another strip to continue adding on until you’ve used up all the strips.
Place the roll into a large baking pan (I recommend a cast iron skillet or springform cake pan.) Cover and allow to rise for 30 minutes.
While the roll is rising, preheat the oven to 350°F.
Uncover and bake for about 55 - 60 minutes, covering with aluminum halfway through.
While the cinnamon roll is baking make the cream cheese frosting. Beat the butter and cream cheese together until smooth and creamy. Add the powdered sugar, salt, and extracts. Mix until well-combined. Add heavy cream one tablespoon at a time as needed to get a nice, soft consistency.
Once the cinnamon roll is finished, allow to cool before slathering with the frosting.