My recent investigation into the endless cycle of queso enjoyment promoted a question in the comments. After I described a bubbling plate of molten cheese primi timpano asked: A little surprised at the bubbling cheese as I thought cheese heated to these temperatures would result in broken proteins. Does Velveeta...
By Scott Reitz
April 20, 2012
We have a favor to ask
We're in the midst of our summer membership campaign, and we have until August 25 to raise $5,500. Your contributions are an investment in our election coverage – they help sustain our newsroom, help us plan, and could lead to an increase in freelance writers or photographers. If you value our work, please make a contribution today to help us reach our goal.
Progress to goal
$5,500
$5,200
Audio By Carbonatix
`,`
Related
- Jörg's Cafe Vienna: More Than 20 Years of Authentic Austrian and German Food
`,`
Related
- Photos: New Eats at Dallas Cowboys Games. Wait, What's a Pizza Burger?
`,`
Related
- Local Italian Ristorante Named One of Best Pizzerias in the U.S. ... Again
`,`
Related
- Olympic Medalist Nic Fink Takes on a New Challenge: a Shift at Raising Cane's in Dallas
`,`
Related
- Truffles Unearthed: Everything You Need to Know About the Luxury Fungus
`,`
Related
- Chasing Our Matcha Dreams at Oak Cliff's New Matcha Bar
`,`
Related
- Drone-Powered Food Delivery Soars in North Texas, Looks To Expand
`,`
Related
- Eat This: Uchiko's Grilled Sea Bass Is the Best Meal for Two in North Texas
`,`
Related
- Best Food Classes in Dallas To Take Your Cooking Skills to the Next Level
` ];
My recent investigation into the endless cycle of queso enjoyment promoted a question in the comments. After I described a bubbling plate of molten cheese primi timpano asked:
A little surprised at the bubbling cheese as I thought cheese heated to these temperatures would result in broken proteins. Does Velveeta have ingredients/properties that prevent this? The Home Sick Texan has a good article and recipe on queso in which she recommends using a bechamel sauce with the cheese, which allows her to use traditional cheeses.
Ah, the broken proteins. Velveeta had a field day poking fun at poor cheddar heated well past its melting point and broken down into curdled milk solids suspended in a sea of orange oil. Velveeta, as featured in the commercials, melts into a sumptuous velvety substance that pours in soft folds, all after a simple pass through the microwave.
The key to cheese melting is moisture. Cheeses with high moisture contents (brie, tallegio, fontina) are softer and melt at lower temperatures -- perfect for oozing grilled cheese sandwiches. Cheeses that have aged a while and have lower moisture content (cheddar, Swiss) melt at higher temperatures and break easily. These require a little help if you want to melt them and not end up with a clumpy, oily mess.
Starchy ingredients, like the flour used to set the bechamel referenced in the question, coat the milk proteins and act as a stabilizer -- cornstarch and arrowroot work too. By incorporating cheese into a starchy sauce you can make a "queso" out of nearly any cheese you like.
As for Velveeta, it's not cheese. Even the USDA, which lets processors label pink slime as beef, required Kraft to find another label. (They went with "cheese food.") Velveeta is the ultimate high-moisture melter because whey, the liquid that separates from the curd in the cheese-making process, is actually reincorporated back into the cheese -- it's hyper-hydrated -- and emulsifiers, which act similarly to the flour in a bechamel, are already included. And that that's why you can boil Velveeta away for days.
') let lineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() if (jQuery(element).prop('tagName').match(/HIDDEN/i) !== null) { jQuery(element).children('div').last().css({ marginBottom: `${lineHeight*2}px` }); } else { jQuery(element).css({ marginTop: `${lineHeight*2}px`, marginBottom: `${lineHeight}px` }); } // const insertionBlockClass = `fdn-paragraph-insertion-block`; const styleElementHook = `fdn-paragraph-insertion-styles`; jQuery(element).addClass(insertionBlockClass); if (jQuery(`[${styleElementHook}]`).length === 0) { jQuery('div.fdn-content-body, div #storyBody').append('
') const paragraphLineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() const styleElement = jQuery(`
`); const styleText = ` div.fdn-content-body br+.${insertionBlockClass}:not([hidden]), div #storyBody br+.${insertionBlockClass}:not([hidden]) { margin-top: ${paragraphLineHeight*2}px; margin-bottom: ${paragraphLineHeight}px; } div.fdn-content-body br+.${insertionBlockClass}[hidden] > div:last-of-type, div #storyBody br+.${insertionBlockClass}[hidden] > div:last-of-type { margin-bottom: ${paragraphLineHeight*2}px; } ` styleElement.text(styleText); jQuery('head').append(styleElement); } // } } jQuery(element).insertBefore(this.paragraphEndNodes[index]); } else { console.warn('Foundation.ParagraphTool.insertElemenAt: invalid insertion index', index); } } this.insertElemenAtEnd = function (element) { if (this.paragraphEndNodes.length) { let lastNode = this.getNodeAtIndex(this.paragraphEndNodes.length -1); if (this.isDoubleBrParagraphBreak(lastNode) || this.isBrParagraphBreakBeforeBlockElement(lastNode)) { if (jQuery(element).get(0).tagName.match(/SCRIPT/i) !== null) { jQuery('
').insertAfter(this.paragraphEndNodes[index]); jQuery('
').insertAfter(this.paragraphEndNodes[index]); } else { jQuery('div.fdn-content-body, div #storyBody').append('
') let lineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() if (jQuery(element).prop('tagName').match(/HIDDEN/i) !== null) { jQuery(element).children('div').last().css({ marginBottom: `${lineHeight*2}px` }); } else { jQuery(element).css({ marginTop: `${lineHeight*2}px`, marginBottom: `${lineHeight}px` }); } } } } this.bodyContainer.append(element); } this.getNodeAtIndex = function (index) { return this.paragraphEndNodes[index]; } }
`); } var paragraphCount = myParagraphTool.getParagraphEndNodeCount(); // No need to insert if there aren't enough paragaphs if (paragraphCount >= parseInt(item.requiredCountToDisplay)) { // Matches specific paragraph insertion indexes if (item.insertPoint.match(/^\d+$/) !== null) { var insertIndex = parseInt(item.insertPoint) - 1; // Insert within content if (insertIndex < paragraphCount) { myParagraphTool.insertElemenAtIndex(componentElement, insertIndex); } // Append to the end if the insert point is beyond the paragraph count else { myParagraphTool.insertElemenAtEnd(componentElement) } } // Matches for 1/2, 1/4, 2/3, 5/6, etc else if (item.insertPoint.match(/^[1223456]\/[23456]$/) !== null) { var fractionMatch = new RegExp(/^([123456])(?:\/)([23456]$)/); var fractionPart = parseInt(item.insertPoint.match(fractionMatch)[1]); var fractionWhole = parseInt(item.insertPoint.match(fractionMatch)[2]); var fractionValue = fractionPart / fractionWhole; var fractionIndex = Math.floor(myParagraphTool.paragraphEndNodes.length * fractionValue) - 1; myParagraphTool.insertElemenAtIndex(componentElement, fractionIndex); } // Matches for every Nth insertion point else if (item.insertPoint.match(/^\d*th$/i) !== null) { var intervalIndex = parseInt(item.insertPoint.match(/^(\d*)th$/i)[1]); var startingIndex = parseInt(item.startingPoint) - 1; var insertionMax = parseInt(item.maxInsertions) || 100; var insertionCount = 0; for (var i = startingIndex; i < myParagraphTool.paragraphEndNodes.length && insertionCount < insertionMax; i++) { if ((i - startingIndex) % intervalIndex === 0) { let currentNode = myParagraphTool.getNodeAtIndex(i); const clonedComponent = componentElement.clone(); myParagraphTool.insertElemenAtIndex(clonedComponent, i); insertionCount++; } } } } }); Foundation.Content['7020539'].setupInlineComponents = function () { return true; }; if (typeof callback === 'function') { callback(); } }, 200); } Foundation.Content['7020539'].previewInsertionPoints = function () { var myParagraphTool = Foundation.Content['7020539'].paragraphTool myParagraphTool.paragraphEndNodes.each((index, item) => { const insertionPointPlaceholder = jQuery(`
`) myParagraphTool.insertElemenAtIndex(insertionPointPlaceholder, index); }); return 'Paragraph insertion placeholders applied.'; }