function execute( $query ) {
		global $wgOut, $wgRequest;

		$this->setHeaders();

		// Cycle through the query values, setting the appropriate
		// local variables
		$filter_name = $wgRequest->getVal( 'filter_name' );
		$values_source = $wgRequest->getVal( 'values_source' );
		$property_name = $wgRequest->getVal( 'property_name' );
		$category_name = $wgRequest->getVal( 'category_name' );
		$time_period = $wgRequest->getVal( 'time_period' );
		$filter_values = $wgRequest->getVal( 'filter_values' );
		$input_type = $wgRequest->getVal( 'input_type' );
		$required_filter = $wgRequest->getVal( 'required_filter' );
		$filter_label = $wgRequest->getVal( 'filter_label' );

		$save_button_text = wfMsg( 'savearticle' );
		$preview_button_text = wfMsg( 'preview' );
		$filter_name_error_str = '';
		$save_page = $wgRequest->getCheck( 'wpSave' );
		$preview_page = $wgRequest->getCheck( 'wpPreview' );
		if ( $save_page || $preview_page ) {
			# validate filter name
			if ( $filter_name == '' ) {
				$filter_name_error_str = wfMsg( 'sd_blank_error' );
			} else {
				# redirect to wiki interface
				$namespace = SD_NS_FILTER;
				$title = Title::newFromText( $filter_name, $namespace );
				$full_text = self::createFilterText( $property_name, $values_source, $category_name, $time_period, $filter_values, $input_type, $required_filter, $filter_label );
				// HTML-encode
				$full_text = str_replace( '"', '"', $full_text );
				$text = SDUtils::printRedirectForm( $title, $full_text, "", $save_page, $preview_page, false, false, false );
				$wgOut->addHTML( $text );
				return;
			}
		}

		// Set 'title' as hidden field, in case there's no URL niceness
		global $wgContLang;
		$mw_namespace_labels = $wgContLang->getNamespaces();
		$special_namespace = $mw_namespace_labels[NS_SPECIAL];
		$name_label = wfMsg( 'sd_createfilter_name' );
		$property_label = wfMsg( 'sd_createfilter_property' );
		$label_label = wfMsg( 'sd_createfilter_label' );
		$text = <<<END
	<form action="" method="post">
	<input type="hidden" name="title" value="$special_namespace:CreateFilter">
	<p>$name_label <input size="25" name="filter_name" value="">
	<span style="color: red;">$filter_name_error_str</span></p>
	<p>$property_label
	<select id="property_dropdown" name="property_name">

END;
		$all_properties = SDUtils::getSemanticProperties();
		foreach ( $all_properties as $property_name ) {
			$text .= "	<option>$property_name</option>\n";
		}

		$values_from_property_label = wfMsg( 'sd_createfilter_usepropertyvalues' );
		$values_from_category_label = wfMsg( 'sd_createfilter_usecategoryvalues' );
		$date_values_label = wfMsg( 'sd_createfilter_usedatevalues' );
		$enter_values_label = wfMsg( 'sd_createfilter_entervalues' );
		// Need both label and value, in case user's language is
		// different from wiki's
		$year_label = wfMsg( 'sd_filter_year' );
		$year_value = wfMsgForContent( 'sd_filter_year' );
		$month_label = wfMsg( 'sd_filter_month' );
		$month_value = wfMsgForContent( 'sd_filter_month' );
		$input_type_label = wfMsg( 'sd_createfilter_inputtype' );
		$values_list_label = wfMsg( 'sd_createfilter_listofvalues' );
		// same as for time values
		$combo_box_label = wfMsg( 'sd_filter_combobox' );
		$combo_box_value = wfMsgForContent( 'sd_filter_combobox' );
		$date_range_label = wfMsg( 'sd_filter_daterange' );
		$date_range_value = wfMsgForContent( 'sd_filter_daterange' );
		$require_filter_label = wfMsg( 'sd_createfilter_requirefilter' );
		$text .= <<<END
	</select>
	</p>
	<p><input type="radio" name="values_source" checked value="property">
	$values_from_property_label
	</p>
	<p><input type="radio" name="values_source" value="category">
	$values_from_category_label
	<select id="category_dropdown" name="category_name">

END;
		$categories = SDUtils::getCategoriesForBrowsing();
		foreach ( $categories as $category ) {
			$category = str_replace( '_', ' ', $category );
			$text .= "	<option>$category</option>\n";
		}
		$text .= <<<END
	</select>
	</p>
	<p><input type="radio" name="values_source" value="dates">
	$date_values_label
	<select id="time_period_dropdown" name="time_period">
	<option value="$year_value">$year_label</option>
	<option value="$month_value">$month_label</option>
	</select>
	</p>
	<p><input type="radio" name="values_source" value="manual">
	$enter_values_label <input size="40" name="filter_values" value="">
	</p>
	<p>$input_type_label
	<select id="input_type_dropdown" name="input_type">
	<option value="">$values_list_label</option>
	<option value="$combo_box_value">$combo_box_label</option>
	<option value="$date_range_value">$date_range_label</option>
	</select>
	</p>
	<p>$require_filter_label
	<select id="required_filter_dropdown" name="required_filter">
	<option />

END;
		$filters = SDUtils::getFilters();
		foreach ( $filters as $filter ) {
			$filter = str_replace( '_', ' ', $filter );
			$text .= "	<option>$filter</option>\n";
		}
		$text .= <<<END
	</select>
	</p>
	<p>$label_label <input size="25" name="filter_label" value=""></p>
	<div class="editButtons">
	<p>
	<input type="submit" id="wpSave" name="wpSave" value="$save_button_text">
	<input type="submit" id="wpPreview" name="wpPreview" value="$preview_button_text"></p>
	</div>

END;

		$text .= "	</form>\n";

		$wgOut->addHTML( $text );
	}