anchor.diff:  		}
   		
   		function save() {
  -			
  +			updateRecipe().then( function() {
  +				alert("Rezept gespeichert.");
  +			})
  +		}
  +		
  +		function updateRecipe() {
  +			var deferred = $.Deferred();
   			$recipe = {};
   			$recipe.uuid = $( "input[name='uuid']" ).val();
   			$recipe.title = $( "input[name='title']" ).val();
  
positive.code: 			    language: "de",
  			    contentsCss: "resources/ckEditorContents.css"
  			});
  			init( function() {
  				$id = getRequestParams( "id" );
  				console.log( "id: " + $id );
  				$url = "recipes/" + $id;
  
negative.code: 					updateIngredient( $( li ).is(":hidden"), $ingredient, recipeId );
  				})
  			});
  			$( "body" ).promise().done( deferred.resolve );
  			return deferred.promise();
  		}
  		
  		function updateIngredient( isHidden, ingredient, recipeId ) {
  			$url = "recipes/" + recipeId + "/ingredients/";
  			
  			if ( isHidden ) {
  				console.log( "Ingredient for delete : " + JSON.stringify( $ingredient ) );
  				$.ajax({
  					type: "DELETE",
  					url: $url + $ingredient.resourceId,
  					success: function() { $( "body" ).dequeue(); }
  				});
  			} else {
  				if ( $ingredient.resourceId == undefined ) {
  					console.log( "new Ingredient : " + JSON.stringify( $ingredient ) );
  					$.ajax({
  						type: "POST",
  						url: $url,
  						data: JSON.stringify( $ingredient ),
  						contentType: "application/json; charset=UTF-8",
  						success: function() { $( "body" ).dequeue(); }
  					});
  				} else {
  					console.log( "exists Ingredient : " + JSON.stringify( $ingredient ) );
  					$.ajax({
  						type: "PUT",
  						url: $url + $ingredient.resourceId,
  						data: JSON.stringify( $ingredient ),
  						contentType: "application/json; charset=UTF-8",
  						success: function() { $( "body" ).dequeue(); }
  					});
  				}
  			}
  		}
  		
  		function init() {
  			var deferred = $.Deferred();
  			$.getJSON( "recipes/tags" )
  				.done( function( tags ) { 
  					$allTags = tags;
  