diff --git a/ajax/order_dialog.html b/ajax/order_dialog.html
index 7d08178..87fdc7b 100644
--- a/ajax/order_dialog.html
+++ b/ajax/order_dialog.html
@@ -1,6 +1,6 @@
 {{vtInclude: includes/initialize.html}}
 
-<div class="modal-dialog modal-dialog-scrollable modal-lg" data-type="{{vtPageType}}">
+<div id="orderDialog" class="modal-dialog modal-dialog-scrollable modal-lg" data-type="{{vtPageType}}">
 	<!-- {{vtPromo}} -->
 	<div class="modal-content">
 		<div class="modal-header">
@@ -170,7 +170,7 @@
 <script>
 	var errorDefault = '{{vtGet:s_msg_0059,escaped}}';
 	var errorMaxItems = '{{vtGet:s_msg_0060,escaped}}';
-	$('.prod-selection').change( function(){
+	$('#orderDialog .prod-selection').change( function(){
 		let row = $(this).parent();
 		let option = $(this).find('option:selected');
 		row.find('.price').text( option.data('price') );
@@ -178,22 +178,32 @@
 		row.find('.vatrate').text( option.data('vatrate') );
 		$(this).parents('.pxtc-product').find('form.order-form input[name=item]').val( $(this).val() );
 	});
-	$('.btn-plus').click( function(){
+	$('#orderDialog .btn-plus').click( function(){
 		$(this).blur();
 		let quantity = 1 * $(this).siblings('.quantity').text() + 1;
 		$(this).parents('.pxtc-product').find('form.order-form input[name=q]').val( quantity );
 		$(this).siblings('.quantity').text( quantity );
 		$(this).siblings('.btn-minus').prop( 'disabled', quantity <= 1 );
 	});
-	$('.btn-minus').click( function(){
+	$('#orderDialog .btn-minus').click( function(){
 		$(this).blur();
 		let quantity = 1 * $(this).siblings('.quantity').text() - 1;
 		$(this).parents('.pxtc-product').find('form.order-form input[name=q]').val( quantity );
 		$(this).siblings('.quantity').text( quantity );
 		$(this).prop( 'disabled', quantity <= 1 );
 	});
-	$('.btn-buy').click( function(){
-		var orderForm = $(this).parents('.pxtc-product').find('form.order-form');
+	$('#orderDialog .btn-buy').click( function(){
+		var row = $(this).parents('.row').first();
+		var orderForm = row.find('form.order-form');
+		var qtyInput = orderForm.find('input[name=q]');
+		if ( row.hasClass('table-warning') ){
+			qtyInput.val(0);
+			row.removeClass('table-warning');
+		}
+		else {
+			qtyInput.val(1);
+			row.addClass('table-warning');
+		}
 		// {{vtIf: {vtPageType} .eq. lightbox }}
 			var products = [{ id: orderForm.find('input[name=item]').val(), quantity: orderForm.find('input[name=q]').val() }];
 			$.ajax({
@@ -233,5 +243,7 @@
 				}
 			});
 		// {{vtEndIf}}
+
+		qtyInput.val( row.hasClass('table-warning') ? 1 : 0 );
 	});
 </script>
diff --git a/lib/pxtc_products.class.php b/lib/pxtc_products.class.php
index 35f7ee6..afd3279 100644
--- a/lib/pxtc_products.class.php
+++ b/lib/pxtc_products.class.php
@@ -196,7 +196,7 @@ class Pixtacy_Products {
 				&& ( empty( self::$globalProducts[ $productId ]['kennung'] )
 				|| hires_file_exists( $imagePath, self::$globalProducts[ $productId ]['kennung'] ) )
 			) {
-				$record = self::get_product_record( $productId );
+				$record = self::get_product_record( $productId, $imageId );
 				if ( $record['type'] == 'Gruppe' ){
 					$record['options'] = self::$productGroups[ $record['id'] ] ?? [];
 				}
diff --git a/product.vtedit.html b/product.vtedit.html
index dec45c0..b33e48e 100644
--- a/product.vtedit.html
+++ b/product.vtedit.html
@@ -265,7 +265,7 @@
 			<tr style="{{vtIf: {Typ} .eq. Gruppe .and. {vtCountPages} .gt. 0 }}display:none{{vtEndIf}}">
 				<td align="right" class="normal">Typ</td>
 				<td class="normal" style="padding-bottom:15px">
-					<!--{{vtIf: {vtGet:ProductGroup} .eq. }}-->
+					<!--{{vtIf: {vtGet:ProductGroup} .eq. .and. {vtGlobal:pxtcExperimentalFeatures} .cn. product_groups }}-->
 					<input id="input_type_group" type="radio" name="Typ" value="Gruppe" {{vtIf:{Typ} .eq. Gruppe}}checked{{vtEndIf}}>
 					<label for="input_type_group">Produktgruppe</label>
 					&nbsp;&nbsp;&nbsp;
diff --git a/product.vtnew.html b/product.vtnew.html
index 43be9a5..25af7be 100644
--- a/product.vtnew.html
+++ b/product.vtnew.html
@@ -244,7 +244,7 @@
 			<tr>
 				<td align="right" class="normal">Typ</td>
 				<td class="normal" style="padding-bottom:15px">
-					<!--{{vtIf: {vtPageType} .eq. productlist }}-->
+					<!--{{vtIf: {vtPageType} .eq. productlist .and. {vtGlobal:pxtcExperimentalFeatures} .cn. product_groups }}-->
 					<input id="input_type_group" type="radio" name="Typ" value="Gruppe" {{vtIf:{Typ} .eq. Gruppe}}checked{{vtEndIf}}>
 					<label for="input_type_group">Produktgruppe</label>
 					&nbsp;&nbsp;&nbsp;
diff --git a/resources/order_dialog.js b/resources/order_dialog.js
index f6932eb..c3cf35d 100644
--- a/resources/order_dialog.js
+++ b/resources/order_dialog.js
@@ -29,7 +29,10 @@ function update_order_row( row, count, price, netprice ){
 
 $(document).ready( function(){
 
-   $('body').append('<div id="add-to-cart" class="modal fade" role="dialog" style="z-index:9051;"></div>');
+	if ( ! $('#add-to-cart').length ){
+   	$('body').append('<div id="add-to-cart" class="modal fade" role="dialog" style="z-index:9051;"></div>');
+	}
+
    $('body').append('<div id="product-info" class="modal fade" role="dialog" style="z-index:9151;"></div>');
 
    $('#add-to-cart').on( 'click', '.btn-prod-info', function(){
diff --git a/resources/style_r.css b/resources/style_r.css
index b7b5a89..1f17c88 100644
--- a/resources/style_r.css
+++ b/resources/style_r.css
@@ -101,4 +101,40 @@ body.view_default2_r  > .container {
 
 #meta_keywords {
 	line-height: 2rem;
-}
\ No newline at end of file
+}
+
+/* Styles for inline order dialog ***/
+
+.inline-dialog #add-to-cart .table {
+	margin-bottom: 0.5rem;
+}
+
+.inline-dialog #add-to-cart .modal-header,
+.inline-dialog #add-to-cart .modal-content .btn-group,
+.inline-dialog #add-to-cart .modal-footer,
+.inline.dialog #btnCartLarge {
+	display: none !important;
+}
+
+.inline-dialog #add-to-cart .modal-header {
+	border-bottom: none;
+}
+
+.inline-dialog #add-to-cart .modal-body {
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.inline-dialog.modal-open {
+	overflow: scroll !important;
+}
+
+@keyframes yellowfade {
+	from { background: #fafa88; }
+	to { background: transparent; }
+}
+
+.highlight {
+	animation: yellowfade 1s;
+}
+
diff --git a/views/image_r.html b/views/image_r.html
index b4bfc14..9351775 100644
--- a/views/image_r.html
+++ b/views/image_r.html
@@ -82,7 +82,11 @@
 	<!--{{vtEndIf}}-->
 	<!--{{vtEndRepeat}}-->
 </head>
-<body id="{{vtGet:PageBodyId}}" class="{{vtGet:PageBodyClass}} {{vtIf: {vtGet:ImageIsInLightbox} .eq. 1 }}flagged{{vtEndIf}} {{vtIf: {vtGet:ImageIsInCart} .eq. 1 }}in-cart{{vtEndIf}}">
+<body id="{{vtGet:PageBodyId}}" class="{{vtGet:PageBodyClass}}
+	{{vtIf: {vtGet:ImageIsInLightbox} .eq. 1 }}flagged{{vtEndIf}}
+	{{vtIf: {vtGet:ImageIsInCart} .eq. 1 }}in-cart{{vtEndIf}}
+	{{vtIf: {vtGlobal:pxtcDetailInlineOrderDialog} .eq. 1 }}inline-dialog{{vtElse}}popup-dialog{{vtEndIf}}
+">
 
 	{{vtInclude: includes/custom_header.html}}
 	{{vtInclude: includes/header_r.html}}
@@ -183,6 +187,10 @@
 					<p id="meta_caption">{{vtGet:ImageCaption,raw}}</p>
 				<!--{{vtEndIf}}-->
 
+				<!--{{vtIf: {vtGlobal:pxtcDetailInlineOrderDialog} .eq. 1 }}-->
+					<div id="add-to-cart"></div>
+				<!--{{vtEndIf}}-->
+
 				<small id="keywordlist">
 					<!--{{vtIf: {vtGet:MetaKeywords} .neq. }}-->
 						<p id="meta_keywords">
@@ -384,7 +392,14 @@
 		});
 
 		$('.btn-buy').click( function(){
-			open_order_dialog('{{vtLink:-met="ajax/order_dialog.html"}}');
+			if ( $('body').hasClass('inline-dialog') ){
+				$('#add-to-cart .modal-content').removeClass('highlight')
+				[0].scrollIntoView({ behavior: 'smooth' });
+				$('#add-to-cart .modal-content').addClass('highlight');
+			}
+			else {
+				open_order_dialog('{{vtLink:-met="ajax/order_dialog.html"}}');
+			}
 		});
 
 		$('.btn-flag').click( function(){
