[med-svn] [praat] 01/07: New upstream version 6.0.33

Rafael Laboissiere rafael at debian.org
Wed Oct 4 04:39:52 UTC 2017


This is an automated email from the git hooks/post-receive script.

rafael pushed a commit to branch master
in repository praat.

commit daaa951b44b785485d37cfbe67808ed99587111b
Author: Rafael Laboissiere <rafael at debian.org>
Date:   Tue Oct 3 10:16:03 2017 -0300

    New upstream version 6.0.33
---
 EEG/praat_EEG.cpp                     |  240 +--
 FFNet/praat_FFNet_init.cpp            |  174 +-
 LPC/praat_LPC_init.cpp                |  394 ++---
 artsynth/praat_Artsynth.cpp           |   71 +-
 contrib/ola/praat_contrib_Ola_KNN.cpp |  560 +++----
 dwtools/Matrix_extensions.cpp         |    2 +-
 dwtools/Matrix_extensions.h           |    2 +-
 dwtools/Polynomial.cpp                |    2 +-
 dwtools/TableOfReal_extensions.cpp    |   25 +-
 dwtools/TableOfReal_extensions.h      |    2 +-
 dwtools/TextGrid_extensions.cpp       |    2 +-
 dwtools/TextGrid_extensions.h         |    4 +-
 dwtools/praat_BSS_init.cpp            |  154 +-
 dwtools/praat_DataModeler_init.cpp    |  598 +++----
 dwtools/praat_David_init.cpp          | 2896 ++++++++++++++++-----------------
 dwtools/praat_HMM_init.cpp            |  226 +--
 dwtools/praat_KlattGrid_init.cpp      |  216 +--
 dwtools/praat_MDS_init.cpp            |  322 ++--
 fon/PointProcess.cpp                  |   25 +
 fon/PointProcess.h                    |    1 +
 fon/Sampled.h                         |    7 +
 fon/manual_Script.cpp                 |    2 +-
 fon/manual_tutorials.cpp              |    6 +-
 fon/praat_ExperimentMFC.cpp           |    4 +-
 fon/praat_Fon.cpp                     |  802 ++++-----
 fon/praat_Matrix.cpp                  |  214 +--
 fon/praat_Sound.cpp                   |  593 +++----
 fon/praat_TextGrid_init.cpp           |  530 +++---
 fon/praat_Tiers.cpp                   |  417 ++---
 fon/praat_TimeFrameSampled.cpp        |    4 +-
 fon/praat_TimeFunction.cpp            |   12 +-
 fon/praat_TimeFunction.h              |    4 +-
 fon/praat_TimeTier.cpp                |   16 +-
 fon/praat_TimeVector.h                |    8 +-
 gram/praat_gram.cpp                   |  598 +++----
 stat/praat_Stat.cpp                   |  306 ++--
 stat/praat_TableOfReal.cpp            |  134 +-
 sys/Data.cpp                          |    5 +-
 sys/Data.h                            |    2 +-
 sys/Formula.cpp                       |  100 ++
 sys/HyperPage.cpp                     |    9 +-
 sys/Interpreter.cpp                   |   43 +-
 sys/Interpreter.h                     |    3 +
 sys/Printer.cpp                       |   65 -
 sys/Ui.cpp                            |   61 +-
 sys/Ui.h                              |    9 +-
 sys/melder_ftoa.cpp                   |    2 +-
 sys/praat.h                           |  179 +-
 sys/praatP.h                          |    4 +-
 sys/praat_actions.cpp                 |   10 +-
 sys/praat_objectMenus.cpp             |  122 +-
 sys/praat_picture.cpp                 |  396 +++--
 sys/praat_version.h                   |    6 +-
 test/sys/graphicsText.praat           |   27 +
 test/sys/object.praat                 |   11 +
 55 files changed, 5390 insertions(+), 5237 deletions(-)

diff --git a/EEG/praat_EEG.cpp b/EEG/praat_EEG.cpp
index 8244d84..135ce6e 100644
--- a/EEG/praat_EEG.cpp
+++ b/EEG/praat_EEG.cpp
@@ -65,7 +65,7 @@ DIRECT (WINDOW_EEG_viewAndEdit) {
 // MARK: Query
 
 FORM (STRING_EEG_getChannelName, U"Get channel name", nullptr) {
-	NATURALVAR (channelNumber, U"Channel number", U"1")
+	NATURAL (channelNumber, U"Channel number", U"1")
 	OK
 DO
 	STRING_ONE (EEG)
@@ -76,7 +76,7 @@ DO
 }
 
 FORM (INTEGER_EEG_getChannelNumber, U"Get channel number", nullptr) {
-	WORDVAR (channelName, U"Channel name", U"Cz")
+	WORD (channelName, U"Channel name", U"Cz")
 	OK
 DO
 	NUMBER_ONE (EEG)
@@ -93,14 +93,14 @@ DIRECT (MODIFY_EEG_detrend) {
 }
 
 FORM (MODIFY_EEG_editExternalElectrodeNames, U"Edit external electrode names", nullptr) {
-	WORD4 (externalElectrode1, U"External electrode 1", U"EXG1")
-	WORD4 (externalElectrode2, U"External electrode 2", U"EXG2")
-	WORD4 (externalElectrode3, U"External electrode 3", U"EXG3")
-	WORD4 (externalElectrode4, U"External electrode 4", U"EXG4")
-	WORD4 (externalElectrode5, U"External electrode 5", U"EXG5")
-	WORD4 (externalElectrode6, U"External electrode 6", U"EXG6")
-	WORD4 (externalElectrode7, U"External electrode 7", U"EXG7")
-	WORD4 (externalElectrode8, U"External electrode 8", U"EXG8")
+	WORD (externalElectrode1, U"External electrode 1", U"EXG1")
+	WORD (externalElectrode2, U"External electrode 2", U"EXG2")
+	WORD (externalElectrode3, U"External electrode 3", U"EXG3")
+	WORD (externalElectrode4, U"External electrode 4", U"EXG4")
+	WORD (externalElectrode5, U"External electrode 5", U"EXG5")
+	WORD (externalElectrode6, U"External electrode 6", U"EXG6")
+	WORD (externalElectrode7, U"External electrode 7", U"EXG7")
+	WORD (externalElectrode8, U"External electrode 8", U"EXG8")
 OK
 	FIND_ONE (EEG)
 		if (EEG_getNumberOfExternalElectrodes (me) == 8) {
@@ -125,8 +125,8 @@ DO
 }
 
 FORM (MODIFY_EEG_removeTriggers, U"Remove triggers", nullptr) {
-	OPTIONMENU_ENUM4 (removeEveryTriggerThat___, U"Remove every trigger that...", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"hi")
+	OPTIONMENU_ENUM (removeEveryTriggerThat___, U"Remove every trigger that...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
 	OK
 DO
 	MODIFY_EACH (EEG)
@@ -135,8 +135,8 @@ DO
 }
 
 FORM (MODIFY_EEG_setChannelName, U"Set channel name", nullptr) {
-	NATURALVAR (channelNumber, U"Channel number", U"1")
-	WORDVAR (newName, U"New name", U"BLA")
+	NATURAL (channelNumber, U"Channel number", U"1")
+	WORD (newName, U"New name", U"BLA")
 	OK
 DO
 	MODIFY_EACH (EEG)
@@ -145,18 +145,18 @@ DO
 }
 
 FORM (MODIFY_EEG_setChannelToZero, U"Set channel to zero", nullptr) {
-	SENTENCE (U"Channel", U"Iz")
+	SENTENCE (channel, U"Channel", U"Iz")
 	OK
 DO
 	MODIFY_EACH (EEG)
-		EEG_setChannelToZero (me, GET_STRING (U"Channel"));
+		EEG_setChannelToZero (me, channel);
 	MODIFY_EACH_END
 }
 
 FORM (MODIFY_EEG_subtractMeanChannel, U"Subtract mean channel", nullptr) {
 	LABEL (U"label", U"Range of reference channels:")
-	NATURALVAR (fromChannel, U"From channel", U"1")
-	NATURALVAR (toChannel, U"To channel", U"32")
+	NATURAL (fromChannel, U"From channel", U"1")
+	NATURAL (toChannel, U"To channel", U"32")
 	OK
 DO
 	MODIFY_EACH (EEG)
@@ -165,8 +165,8 @@ DO
 }
 
 FORM (MODIFY_EEG_subtractReference, U"Subtract reference", nullptr) {
-	WORDVAR (referenceChannel1, U"Reference channel 1", U"MASL")
-	WORDVAR (referenceChannel2, U"Reference channel 2 (optional)", U"MASR")
+	WORD (referenceChannel1, U"Reference channel 1", U"MASL")
+	WORD (referenceChannel2, U"Reference channel 2 (optional)", U"MASR")
 	OK
 DO
 	MODIFY_EACH (EEG)
@@ -175,11 +175,11 @@ DO
 }
 
 FORM (MODIFY_EEG_filter, U"Filter", nullptr) {
-	REALVAR (lowFrequency, U"Low frequency (Hz)", U"1.0")
-	REALVAR (lowWidth, U"Low width (Hz)", U"0.5")
-	REALVAR (highFrequency, U"High frequency (Hz)", U"25.0")
-	REALVAR (highWidth, U"High width (Hz)", U"12.5")
-	BOOLEANVAR (notchAt50Hz, U"Notch at 50 Hz", true)
+	REAL (lowFrequency, U"Low frequency (Hz)", U"1.0")
+	REAL (lowWidth, U"Low width (Hz)", U"0.5")
+	REAL (highFrequency, U"High frequency (Hz)", U"25.0")
+	REAL (highWidth, U"High width (Hz)", U"12.5")
+	BOOLEAN (notchAt50Hz, U"Notch at 50 Hz", true)
 	OK
 DO
 	MODIFY_EACH (EEG)
@@ -190,7 +190,7 @@ DO
 // MARK: Extract
 
 FORM (NEW_EEG_extractChannel, U"EEG: Extract channel", nullptr) {
-	SENTENCEVAR (channelName, U"Channel name", U"Cz")
+	SENTENCE (channelName, U"Channel name", U"Cz")
 	OK
 DO
 	CONVERT_EACH (EEG)
@@ -199,9 +199,9 @@ DO
 }
 
 FORM (NEW_EEG_extractPart, U"EEG: Extract part", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"1.0")
-	BOOLEANVAR (preserveTimes, U"Preserve times", false)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"1.0")
+	BOOLEAN (preserveTimes, U"Preserve times", false)
 	OK
 DO
 	CONVERT_EACH (EEG)
@@ -224,9 +224,9 @@ DIRECT (NEW_EEG_extractTextGrid) {
 }
 
 FORM (NEW_EEG_to_ERPTier_bit, U"To ERPTier (bit)", nullptr) {
-	REALVAR (fromTime, U"From time (s)", U"-0.11")
-	REALVAR (toTime, U"To time (s)", U"0.39")
-	NATURALVAR (markerBit, U"Marker bit", U"8")
+	REAL (fromTime, U"From time (s)", U"-0.11")
+	REAL (toTime, U"To time (s)", U"0.39")
+	NATURAL (markerBit, U"Marker bit", U"8")
 	OK
 DO
 	CONVERT_EACH (EEG)
@@ -235,9 +235,9 @@ DO
 }
 
 FORM (NEW_EEG_to_ERPTier_marker, U"To ERPTier (marker)", nullptr) {
-	REALVAR (fromTime, U"From time (s)", U"-0.11")
-	REALVAR (toTime, U"To time (s)", U"0.39")
-	NATURALVAR (markerNumber, U"Marker number", U"12")
+	REAL (fromTime, U"From time (s)", U"-0.11")
+	REAL (toTime, U"To time (s)", U"0.39")
+	NATURAL (markerNumber, U"Marker number", U"12")
 	OK
 DO
 	CONVERT_EACH (EEG)
@@ -246,10 +246,10 @@ DO
 }
 
 FORM (NEW_EEG_to_ERPTier_triggers, U"To ERPTier (triggers)", nullptr) {
-	REALVAR (fromTime, U"From time (s)", U"-0.11")
-	REALVAR (toTime, U"To time (s)", U"0.39")
-	OPTIONMENU_ENUMVAR (getEveryEventWithATriggerThat, U"Get every event with a trigger that", kMelder_string, DEFAULT)
-	SENTENCEVAR (theText, U"...the text", U"1")
+	REAL (fromTime, U"From time (s)", U"-0.11")
+	REAL (toTime, U"To time (s)", U"0.39")
+	OPTIONMENU_ENUM (getEveryEventWithATriggerThat, U"Get every event with a trigger that", kMelder_string, DEFAULT)
+	SENTENCE (theText, U"...the text", U"1")
 	OK
 DO
 	CONVERT_EACH (EEG)
@@ -258,12 +258,12 @@ DO
 }
 
 FORM (NEW_EEG_to_ERPTier_triggers_preceded, U"To ERPTier (triggers, preceded)", nullptr) {
-	REALVAR (fromTime, U"From time (s)", U"-0.11")
-	REALVAR (toTime, U"To time (s)", U"0.39")
-	OPTIONMENU_ENUMVAR (getEveryEventWithATriggerThat, U"Get every event with a trigger that", kMelder_string, DEFAULT)
-	SENTENCEVAR (text1, U"...the text", U"1")
-	OPTIONMENU_ENUMVAR (andIsPrecededByATriggerThat, U"and is preceded by a trigger that", kMelder_string, DEFAULT)
-	SENTENCEVAR (text2, U" ...the text", U"4")
+	REAL (fromTime, U"From time (s)", U"-0.11")
+	REAL (toTime, U"To time (s)", U"0.39")
+	OPTIONMENU_ENUM (getEveryEventWithATriggerThat, U"Get every event with a trigger that", kMelder_string, DEFAULT)
+	SENTENCE (text1, U"...the text", U"1")
+	OPTIONMENU_ENUM (andIsPrecededByATriggerThat, U"and is preceded by a trigger that", kMelder_string, DEFAULT)
+	SENTENCE (text2, U" ...the text", U"4")
 	OK
 DO
 	CONVERT_EACH (EEG)
@@ -281,9 +281,9 @@ DIRECT (NEW1_EEGs_concatenate) {
 }
 
 FORM (NEW_EEG_to_MixingMatrix, U"To MixingMatrix", nullptr) {
-	NATURAL4 (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
-	POSITIVE4 (tolerance, U"Tolerance", U"0.001")
-	OPTIONMENU4x (diagonalizationMethod, U"Diagonalization method", 2, 1)
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
+	POSITIVE (tolerance, U"Tolerance", U"0.001")
+	OPTIONMENUx (diagonalizationMethod, U"Diagonalization method", 2, 1)
 		OPTION (U"qdiag")
 		OPTION (U"ffdiag")
 	OK
@@ -338,11 +338,11 @@ DIRECT (WINDOW_ERP_viewAndEdit) {
 // MARK: Tabulate
 
 FORM (NEW_ERP_downto_Table, U"ERP: Down to Table", nullptr) {
-	BOOLEAN4 (includeSampleNumber, U"Include sample number", false)
-	BOOLEAN4 (includeTime, U"Include time", true)
-	NATURAL4 (timeDecimals, U"Time decimals", U"6")
-	NATURAL4 (voltageDecimals, U"Voltage decimals", U"12")
-	RADIO4x (voltageUnits, U"Voltage units", 1, 1)
+	BOOLEAN (includeSampleNumber, U"Include sample number", false)
+	BOOLEAN (includeTime, U"Include time", true)
+	NATURAL (timeDecimals, U"Time decimals", U"6")
+	NATURAL (voltageDecimals, U"Voltage decimals", U"12")
+	RADIOx (voltageUnits, U"Voltage units", 1, 1)
 		OPTION (U"volt")
 		OPTION (U"microvolt")
 	OK
@@ -356,12 +356,12 @@ DO
 // MARK: Draw
 
 FORM (GRAPHICS_ERP_draw, U"ERP: Draw", nullptr) {
-	SENTENCE4 (channelName, U"Channel name", U"Cz")
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range", U"0.0 (= all)")
-	REAL4 (fromVoltage, U"left Voltage range (V)", U"10e-6")
-	REAL4 (toVoltage, U"right Voltage range", U"-10e-6")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	SENTENCE (channelName, U"Channel name", U"Cz")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range", U"0.0 (= all)")
+	REAL (fromVoltage, U"left Voltage range (V)", U"10e-6")
+	REAL (toVoltage, U"right Voltage range", U"-10e-6")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (ERP)
@@ -370,11 +370,11 @@ DO
 }
 
 FORM (GRAPHICS_ERP_drawScalp, U"ERP: Draw scalp", nullptr) {
-	REAL4 (fromTime, U"left Time range (s)", U"0.1")
-	REAL4 (toTime, U"right Time range", U"0.2")
-	REAL4 (fromVoltage, U"left Voltage range (V)", U"10e-6")
-	REAL4 (toVoltage, U"right Voltage range", U"-10e-6")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromTime, U"left Time range (s)", U"0.1")
+	REAL (toTime, U"right Time range", U"0.2")
+	REAL (fromVoltage, U"left Voltage range (V)", U"10e-6")
+	REAL (toVoltage, U"right Voltage range", U"-10e-6")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (ERP)
@@ -384,12 +384,12 @@ DO
 }
 
 FORM (GRAPHICS_ERP_drawScalp_colour, U"ERP: Draw scalp (colour)", nullptr) {
-	REAL4 (fromTime, U"left Time range (s)", U"0.1")
-	REAL4 (toTime, U"right Time range", U"0.2")
-	REAL4 (fromVoltage, U"left Voltage range (V)", U"10e-6")
-	REAL4 (toVoltage, U"right Voltage range", U"-10e-6")
-	RADIO_ENUM4 (colourScale, U"Colour scale", kGraphics_colourScale, BLUE_TO_RED)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromTime, U"left Time range (s)", U"0.1")
+	REAL (toTime, U"right Time range", U"0.2")
+	REAL (fromVoltage, U"left Voltage range (V)", U"10e-6")
+	REAL (toVoltage, U"right Voltage range", U"-10e-6")
+	RADIO_ENUM (colourScale, U"Colour scale", kGraphics_colourScale, BLUE_TO_RED)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (ERP)
@@ -399,9 +399,9 @@ DO
 }
 
 FORM (GRAPHICS_ERP_drawScalp_garnish, U"ERP: Draw scalp (garnish)", nullptr) {
-	REAL4 (fromVoltage, U"left Voltage range (V)", U"10e-6")
-	REAL4 (toVoltage, U"right Voltage range", U"-10e-6")
-	RADIO_ENUM4 (colourScale, U"Colour scale", kGraphics_colourScale, BLUE_TO_RED)
+	REAL (fromVoltage, U"left Voltage range (V)", U"10e-6")
+	REAL (toVoltage, U"right Voltage range", U"-10e-6")
+	RADIO_ENUM (colourScale, U"Colour scale", kGraphics_colourScale, BLUE_TO_RED)
 	OK
 DO
 	GRAPHICS_NONE
@@ -412,7 +412,7 @@ DO
 // MARK: Query
 
 FORM (STRING_ERP_getChannelName, U"Get channel name", nullptr) {
-	NATURAL4 (channelNumber, U"Channel number", U"1")
+	NATURAL (channelNumber, U"Channel number", U"1")
 	OK
 DO
 	STRING_ONE (ERP)
@@ -423,7 +423,7 @@ DO
 }
 
 FORM (INTEGER_ERP_getChannelNumber, U"Get channel number", nullptr) {
-	WORD4 (channelName, U"Channel name", U"Cz")
+	WORD (channelName, U"Channel name", U"Cz")
 	OK
 DO
 	NUMBER_ONE (ERP)
@@ -432,10 +432,10 @@ DO
 }
 
 FORM (REAL_ERP_getMinimum, U"ERP: Get minimum", U"Sound: Get minimum...") {
-	SENTENCE4 (channelName, U"Channel name", U"Cz")
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	SENTENCE (channelName, U"Channel name", U"Cz")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -452,10 +452,10 @@ DO
 }
 
 FORM (REAL_ERP_getTimeOfMinimum, U"ERP: Get time of minimum", U"Sound: Get time of minimum...") {
-	SENTENCE4 (channelName, U"Channel name", U"Cz")
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	SENTENCE (channelName, U"Channel name", U"Cz")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -472,10 +472,10 @@ DO
 }
 
 FORM (REAL_ERP_getMaximum, U"ERP: Get maximum", U"Sound: Get maximum...") {
-	SENTENCE4 (channelName, U"Channel name", U"Cz")
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	SENTENCE (channelName, U"Channel name", U"Cz")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -492,10 +492,10 @@ DO
 }
 
 FORM (REAL_ERP_getTimeOfMaximum, U"ERP: Get time of maximum", U"Sound: Get time of maximum...") {
-	SENTENCE4 (channelName, U"Channel name", U"Cz")
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	SENTENCE (channelName, U"Channel name", U"Cz")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -512,9 +512,9 @@ DO
 }
 
 FORM (REAL_ERP_getMean, U"ERP: Get mean", U"ERP: Get mean...") {
-	SENTENCE4 (channelName, U"Channel name", U"Cz")
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
+	SENTENCE (channelName, U"Channel name", U"Cz")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
 	OK
 DO
 	NUMBER_ONE (ERP)
@@ -531,7 +531,7 @@ FORM (MODIFY_ERP_formula, U"ERP: Formula", U"ERP: Formula...") {
 	LABEL (U"label2", U"x = x1   ! time associated with first sample")
 	LABEL (U"label3", U"for col from 1 to ncol")
 	LABEL (U"label4", U"   self [col] = ...")
-	TEXTFIELD4 (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	LABEL (U"label5", U"   x = x + dx")
 	LABEL (U"label6", U"endfor")
 	OK
@@ -542,11 +542,11 @@ DO
 }
 
 FORM (MODIFY_ERP_formula_part, U"ERP: Formula (part)", U"ERP: Formula...") {
-	REAL4 (fromTime, U"From time", U"0.0")
-	REAL4 (toTime, U"To time", U"0.0 (= all)")
-	NATURAL4 (fromChannel, U"From channel", U"1")
-	NATURAL4 (toChannel, U"To channel", U"2")
-	TEXTFIELD4 (formula, U"formula", U"2 * self")
+	REAL (fromTime, U"From time", U"0.0")
+	REAL (toTime, U"To time", U"0.0 (= all)")
+	NATURAL (fromChannel, U"From channel", U"1")
+	NATURAL (toChannel, U"To channel", U"2")
+	TEXTFIELD (formula, U"formula", U"2 * self")
 	OK
 DO
 	MODIFY_EACH_WEAK (ERP)
@@ -558,7 +558,7 @@ DO
 // MARK: Extract
 
 FORM (NEW_ERP_extractOneChannelAsSound, U"ERP: Extract one channel as Sound", nullptr) {
-	WORDVAR (channelName, U"Channel name", U"Cz")
+	WORD (channelName, U"Channel name", U"Cz")
 	OK
 DO
 	CONVERT_EACH (ERP)
@@ -587,7 +587,7 @@ DIRECT (HELP_ERPTier_help) {
 // MARK: Query
 
 FORM (STRING_ERPTier_getChannelName, U"Get channel name", nullptr) {
-	NATURALVAR (channelNumber, U"Channel number", U"1")
+	NATURAL (channelNumber, U"Channel number", U"1")
 	OK
 DO
 	STRING_ONE (ERPTier)
@@ -598,7 +598,7 @@ DO
 }
 
 FORM (INTEGER_ERPTier_getChannelNumber, U"Get channel number", nullptr) {
-	WORDVAR (channelName, U"Channel name", U"Cz")
+	WORD (channelName, U"Channel name", U"Cz")
 	OK
 DO
 	NUMBER_ONE (ERPTier)
@@ -607,10 +607,10 @@ DO
 }
 
 FORM (REAL_ERPTier_getMean, U"ERPTier: Get mean", U"ERPTier: Get mean...") {
-	NATURALVAR (pointNumber, U"Point number", U"1")
-	SENTENCEVAR (channelName, U"Channel name", U"Cz")
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"0.0 (= all)")
+	NATURAL (pointNumber, U"Point number", U"1")
+	SENTENCE (channelName, U"Channel name", U"Cz")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
 	OK
 DO
 	NUMBER_ONE (ERPTier)
@@ -621,7 +621,7 @@ DO
 // MARK: Modify
 
 FORM (MODIFY_ERPTier_rejectArtefacts, U"Reject artefacts", nullptr) {
-	POSITIVEVAR (threshold, U"Threshold (V)", U"75e-6")
+	POSITIVE (threshold, U"Threshold (V)", U"75e-6")
 	OK
 DO
 	MODIFY_EACH (ERPTier)
@@ -630,8 +630,8 @@ DO
 }
 
 FORM (MODIFY_ERPTier_removeEventsBetween, U"Remove events", U"ERPTier: Remove events between...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"1.0")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"1.0")
 	OK
 DO
 	MODIFY_EACH (ERPTier)
@@ -640,8 +640,8 @@ DO
 }
 
 FORM (MODIFY_ERPTier_subtractBaseline, U"Subtract baseline", nullptr) {
-	REAL4 (baselineStartTime, U"Baseline start time (s)", U"-0.11")
-	REAL4 (baselineEndTime, U"Baseline end time (s)", U"0.0")
+	REAL (baselineStartTime, U"Baseline start time (s)", U"-0.11")
+	REAL (baselineEndTime, U"Baseline end time (s)", U"0.0")
 	OK
 DO
 	MODIFY_EACH (ERPTier)
@@ -652,7 +652,7 @@ DO
 // MARK: Analyse
 
 FORM (NEW_ERPTier_to_ERP, U"ERPTier: To ERP", nullptr) {
-	NATURAL4 (eventNumber, U"Event number", U"1")
+	NATURAL (eventNumber, U"Event number", U"1")
 	OK
 DO
 	CONVERT_EACH (ERPTier)
@@ -669,9 +669,9 @@ DIRECT (NEW_ERPTier_to_ERP_mean) {
 // MARK: - ERPTIER & TABLE
 
 FORM (NEW1_ERPTier_Table_extractEventsWhereColumn_number, U"Extract events where column (number)", nullptr) {
-	WORD4 (extractAllEventsWhereColumn___, U"Extract all events where column...", U"")
-	RADIO_ENUM4 (___is___, U"...is...", kMelder_number, DEFAULT)
-	REAL4 (___theNumber, U"...the number", U"0.0")
+	WORD (extractAllEventsWhereColumn___, U"Extract all events where column...", U"")
+	RADIO_ENUM (___is___, U"...is...", kMelder_number, DEFAULT)
+	REAL (___theNumber, U"...the number", U"0.0")
 	OK
 DO
 	CONVERT_TWO (ERPTier, Table)
@@ -681,9 +681,9 @@ DO
 }
 
 FORM (NEW1_ERPTier_Table_extractEventsWhereColumn_text, U"Extract events where column (text)", nullptr) {
-	WORD4 (extractAllEventsWhereColumn___, U"Extract all events where column...", U"")
-	OPTIONMENU_ENUM4 (___, U"...", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"hi")
+	WORD (extractAllEventsWhereColumn___, U"Extract all events where column...", U"")
+	OPTIONMENU_ENUM (___, U"...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
 	OK
 DO
 	CONVERT_TWO (ERPTier, Table)
@@ -694,7 +694,7 @@ DO
 
 // MARK: - file recognizers
 
-static autoDaata bdfFileRecognizer (int nread, const char * /* header */, MelderFile file) {
+static autoDaata bdfFileRecognizer (integer nread, const char * /* header */, MelderFile file) {
 	const char32 *fileName = MelderFile_name (file);
 	bool isBdfFile = Melder_stringMatchesCriterion (fileName, kMelder_string::ENDS_WITH, U".bdf") ||
 	                 Melder_stringMatchesCriterion (fileName, kMelder_string::ENDS_WITH, U".BDF");
diff --git a/FFNet/praat_FFNet_init.cpp b/FFNet/praat_FFNet_init.cpp
index ded9526..f3dcef8 100644
--- a/FFNet/praat_FFNet_init.cpp
+++ b/FFNet/praat_FFNet_init.cpp
@@ -59,11 +59,11 @@ static char32 const *EXTRACT_BUTTON = U"Extract -";
 /**************** New FFNet ***************************/
 
 FORM (NEW1_FFNet_create, U"Create FFNet", U"Create FFNet...") {
-	WORDVAR (name, U"Name", U"4-3")
-	NATURALVAR (numberOfInputs, U"Number of inputs", U"4")
-	NATURALVAR (numberOfOutputs, U"Number of outputs", U"3")
-	INTEGERVAR (numberOfUnits1, U"Number of units in hidden layer 1", U"0")
-	INTEGERVAR (numberOfUnits2, U"Number of units in hidden layer 2", U"0")
+	WORD (name, U"Name", U"4-3")
+	NATURAL (numberOfInputs, U"Number of inputs", U"4")
+	NATURAL (numberOfOutputs, U"Number of outputs", U"3")
+	INTEGER (numberOfUnits1, U"Number of units in hidden layer 1", U"0")
+	INTEGER (numberOfUnits2, U"Number of units in hidden layer 2", U"0")
 	OK
 DO
 	CREATE_ONE
@@ -73,8 +73,8 @@ DO
 
 FORM (NEWMANY_FFNet_createIrisExample, U"Create iris example", U"Create iris example...") {
 	LABEL (U"", U"For the feedforward neural net we need to know the:")
-	INTEGERVAR (numberOfUnits1, U"Number of units in hidden layer 1", U"0")
-	INTEGERVAR (numberOfUnits2, U"Number of units in hidden layer 2", U"0")
+	INTEGER (numberOfUnits1, U"Number of units in hidden layer 1", U"0")
+	INTEGER (numberOfUnits2, U"Number of units in hidden layer 2", U"0")
 	OK
 DO
 	autoCollection result = FFNet_createIrisExample (numberOfUnits1, numberOfUnits2);
@@ -82,11 +82,11 @@ DO
 END }
 
 FORM (NEW1_FFNet_create_linearOutputs, U"Create FFNet", U"Create FFNet (linear outputs)...") {
-	WORDVAR (name, U"Name", U"4-3")
-	NATURALVAR (numberOfInputs, U"Number of inputs", U"4")
-	NATURALVAR (numberOfOutputs, U"Number of outputs", U"3")
-	INTEGERVAR (numberOfUnits1, U"Number of units in hidden layer 1", U"0")
-	INTEGERVAR (numberOfUnits2, U"Number of units in hidden layer 2", U"0")
+	WORD (name, U"Name", U"4-3")
+	NATURAL (numberOfInputs, U"Number of inputs", U"4")
+	NATURAL (numberOfOutputs, U"Number of outputs", U"3")
+	INTEGER (numberOfUnits1, U"Number of units in hidden layer 1", U"0")
+	INTEGER (numberOfUnits2, U"Number of units in hidden layer 2", U"0")
 	OK
 DO
 	CREATE_ONE
@@ -97,9 +97,9 @@ DO
 /**************** New PatternList ***************************/
 
 FORM (NEW1_PatternList_create, U"Create PatternList", nullptr) {
-	WORDVAR (name, U"Name", U"1x1")
-	NATURALVAR (patternDimension, U"Dimension of a pattern", U"1")
-	NATURALVAR (numberOfPatterns, U"Number of patterns", U"1")
+	WORD (name, U"Name", U"1x1")
+	NATURAL (patternDimension, U"Dimension of a pattern", U"1")
+	NATURAL (numberOfPatterns, U"Number of patterns", U"1")
 	OK
 DO
 	CREATE_ONE
@@ -110,7 +110,7 @@ DO
 /**************** New Categories ***************************/
 	
 FORM (NEW1_Categories_create, U"Create Categories", nullptr) {
-	WORDVAR (name, U"Name", U"empty")
+	WORD (name, U"Name", U"empty")
 	OK
 DO
 	CREATE_ONE
@@ -130,8 +130,8 @@ DIRECT (GRAPHICS_FFNet_drawTopology) {
 }
 
 FORM (GRAPHICS_FFNet_drawWeights, U"FFNet: Draw weights", U"FFNet: Draw weights...") {
-	NATURALVAR (layer, U"Layer number", U"1")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (layer, U"Layer number", U"1")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FFNet)
@@ -141,12 +141,12 @@ DO
 	
 FORM (GRAPHICS_FFNet_drawWeightsToLayer, U"FFNet: Draw weights to layer", nullptr) {
 	LABEL (U"", U"Warning: Disapproved. Use \"Draw weights..\" instead.")
-	NATURALVAR (layer, U"Layer number", U"1")
-	RADIOVAR (scale, U"Scale", 1)
+	NATURAL (layer, U"Layer number", U"1")
+	RADIO (scale, U"Scale", 1)
 		RADIOBUTTON (U"by maximum of all weights to layer")
 		RADIOBUTTON (U"by maximum weight from 'from-unit'")
 		RADIOBUTTON (U"by maximum weight to 'to-unit'")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FFNet)
@@ -155,11 +155,11 @@ DO
 }
 
 FORM (GRAPHICS_FFNet_drawCostHistory, U"FFNet: Draw cost history", U"FFNet: Draw cost history...") {
-	INTEGERVAR (fromIteration, U"left Iteration_range", U"0")
-	INTEGERVAR (toIteration, U"right Iteration_range", U"0")
-	REALVAR (fromCost, U"left Cost_range", U"0.0")
-	REALVAR (toCost, U"right Cost_range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (fromIteration, U"left Iteration_range", U"0")
+	INTEGER (toIteration, U"right Iteration_range", U"0")
+	REAL (fromCost, U"left Cost_range", U"0.0")
+	REAL (toCost, U"right Cost_range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FFNet)
@@ -181,7 +181,7 @@ DIRECT (INTEGER_FFNet_getNumberOfOutputs) {
 
 
 FORM (INTEGER_FFNet_getNumberOfHiddenUnits, U"FFNet: Get number of hidden units", U"FFNet: Get number of hidden units...") {
-	NATURALVAR (layer, U"Hidden layer number", U"1")
+	NATURAL (layer, U"Hidden layer number", U"1")
 	OK
 DO
 	INTEGER_ONE (FFNet)
@@ -196,7 +196,7 @@ DIRECT (INTEGER_FFNet_getNumberOfInputs) {
 }
 
 FORM (INTEGER_FFNet_getNumberOfHiddenWeights, U"FFNet: Get number of hidden weights", U"FFNet: Get number of hidden weights...") {
-	NATURALVAR (layer, U"Hidden layer number", U"1")
+	NATURAL (layer, U"Hidden layer number", U"1")
 	OK
 DO
 	INTEGER_ONE (FFNet)
@@ -211,7 +211,7 @@ DIRECT (INTEGER_FFNet_getNumberOfOutputWeights) {
 }
 
 FORM (INFO_FFNet_getCategoryOfOutputUnit, U"FFNet: Get category of output unit", nullptr) {
-	NATURALVAR (outputUnit, U"Output unit", U"1")
+	NATURAL (outputUnit, U"Output unit", U"1")
 	OK
 DO
 	STRING_ONE (FFNet)
@@ -220,7 +220,7 @@ DO
 }
 
 FORM (INTEGER_FFNet_getOutputUnitOfCategory, U"FFNet: Get output unit of category", nullptr) {
-	SENTENCEVAR (category, U"Category", U"u")
+	SENTENCE (category, U"Category", U"u")
 	OK
 DO
 	INTEGER_ONE (FFNet)
@@ -230,8 +230,8 @@ DO
 
 
 FORM (REAL_FFNet_getBias, U"FFNet: Get bias", nullptr) {
-	NATURALVAR (layer, U"Layer", U"1")
-	NATURALVAR (unit, U"Unit", U"1")
+	NATURAL (layer, U"Layer", U"1")
+	NATURAL (unit, U"Unit", U"1")
 	OK
 DO
 	NUMBER_ONE (FFNet)
@@ -241,9 +241,9 @@ DO
 
 
 FORM (REAL_FFNet_getWeight, U"FFNet: Get weight", nullptr) {
-	NATURALVAR (layer, U"Layer", U"1")
-	NATURALVAR (unitTo, U"Unit", U"1")
-	NATURALVAR (unitFrom, U"Unit from", U"1")
+	NATURAL (layer, U"Layer", U"1")
+	NATURAL (unitTo, U"Unit", U"1")
+	NATURAL (unitFrom, U"Unit from", U"1")
 	OK
 DO
 	NUMBER_ONE (FFNet)
@@ -258,9 +258,9 @@ DIRECT (REAL_FFNet_getMinimum) {
 }
 
 FORM (MODIFY_FFNet_setBias, U"FFNet: Set bias", nullptr) {
-	NATURALVAR (layer, U"Layer", U"1")
-	NATURALVAR (unit, U"Unit", U"1")
-	REALVAR (value, U"Value", U"0.0")
+	NATURAL (layer, U"Layer", U"1")
+	NATURAL (unit, U"Unit", U"1")
+	REAL (value, U"Value", U"0.0")
 	OK
 DO
 	MODIFY_EACH (FFNet)
@@ -269,10 +269,10 @@ DO
 }
 
 FORM (MODIFY_FFNet_setWeight, U"FFNet: Set weight", nullptr) {
-	NATURALVAR (layer, U"Layer", U"1")
-	NATURALVAR (unitTo, U"Unit", U"1")
-	NATURALVAR (unitFrom, U"Unit (from)", U"1")
-	REALVAR (value, U"Value", U"0.0")
+	NATURAL (layer, U"Layer", U"1")
+	NATURAL (unitTo, U"Unit", U"1")
+	NATURAL (unitFrom, U"Unit (from)", U"1")
+	REAL (value, U"Value", U"0.0")
 	OK
 DO
 	MODIFY_EACH (FFNet)
@@ -283,7 +283,7 @@ DO
 FORM (MODIFY_FFNet_reset, U"FFNet: Reset", U"FFNet: Reset...") {
 	LABEL (U"", U"Warning: this command destroys all previous learning.")
 	LABEL (U"", U"New weights will be randomly chosen from the interval [-range, +range].")
-	POSITIVEVAR (range, U"Range", U"0.1")
+	POSITIVE (range, U"Range", U"0.1")
 	OK
 DO
 	MODIFY_EACH (FFNet)
@@ -294,7 +294,7 @@ DO
 FORM (MODIFY_FFNet_selectBiasesInLayer, U"FFNet: Select biases", U"FFNet: Select biases...") {
 	LABEL (U"", U"WARNING: This command induces very specific behaviour ")
 	LABEL (U"", U"during a following learning phase.")
-	NATURALVAR (layer, U"Layer number", U"1")
+	NATURAL (layer, U"Layer number", U"1")
 	OK
 DO
 	MODIFY_EACH (FFNet)
@@ -309,7 +309,7 @@ DIRECT (MODIFY_FFNet_selectAllWeights) {
 }
 
 FORM (NEW_FFNet_extractWeights, U"FFNet: Extract weights", U"FFNet: Extract weights...") {
-	NATURALVAR (layer, U"Layer number", U"1")
+	NATURAL (layer, U"Layer number", U"1")
 	OK
 DO
 	CONVERT_EACH (FFNet)
@@ -319,7 +319,7 @@ DO
 
 FORM (NEW_FFNet_weightsToMatrix, U"FFNet: Weights to Matrix ", nullptr) {
 	LABEL (U"", U"Warning: Use \"Extract weights..\" instead.")
-	NATURALVAR (layer, U"Layer number", U"1")
+	NATURAL (layer, U"Layer number", U"1")
 	OK
 DO
 	CONVERT_EACH (FFNet)
@@ -340,7 +340,7 @@ END }
 /******************* FFNet && ActivationList ******************************************/
 
 FORM (NEW1_FFNet_ActivationList_to_Categories, U"FFNet & ActivationList: To Categories", 0) {
-	RADIOVAR (categorizationgMethod, U"Categorization method", 1)
+	RADIO (categorizationgMethod, U"Categorization method", 1)
 		RADIOBUTTON (U"Winner-takes-all")
 		RADIOBUTTON (U"Stochastic")
 	OK
@@ -353,12 +353,12 @@ DO
 /******************* FFNet && Eigen ******************************************/
 
 FORM (GRAPHICS_FFNet_Eigen_drawIntersection, U"FFnet & Eigen: Draw intersection", 0) {
-	NATURALVAR (pcx, U"X-component", U"1")
-	NATURALVAR (pcy, U"Y-component", U"2")
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0")
-	REALVAR (ymin, U"Ymin", U"0.0")
-	REALVAR (ymax, U"Ymax", U"0.0")
+	NATURAL (pcx, U"X-component", U"1")
+	NATURAL (pcy, U"Y-component", U"2")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0")
+	REAL (ymin, U"Ymin", U"0.0")
+	REAL (ymax, U"Ymax", U"0.0")
 	OK
 DO
 	GRAPHICS_TWO (FFNet, Eigen)
@@ -377,7 +377,7 @@ DIRECT (NEW1_FFNet_Categories_to_ActivationList) {
 /************************* FFNet && Matrix **********************************/
 
 FORM (NEW1_FFNet_weightsFromMatrix, U"Replace weights by values from Matrix", nullptr) {
-	NATURALVAR (layer, U"Layer", U"1")
+	NATURAL (layer, U"Layer", U"1")
 	OK
 DO
 	CONVERT_TWO (FFNet, Matrix)
@@ -388,7 +388,7 @@ DO
 /************************* FFNet && PatternList **********************************/
 
 FORM (GRAPHICS_FFNet_PatternList_drawActivation, U"Draw an activation", nullptr) {
-	NATURALVAR (row, U"PatternList (row) number", U"1");
+	NATURAL (row, U"PatternList (row) number", U"1");
 	OK
 DO
 	GRAPHICS_TWO (FFNet, PatternList)
@@ -397,7 +397,7 @@ DO
 }
 
 FORM (NEW1_FFNet_PatternList_to_Categories, U"FFNet & PatternList: To Categories", U"FFNet & PatternList: To Categories...") {
-	RADIOVAR (categorizationgMethod, U"Categorization method", 1)
+	RADIO (categorizationgMethod, U"Categorization method", 1)
 		RADIOBUTTON (U"Winner-takes-all")
 		RADIOBUTTON (U"Stochastic")
 	OK
@@ -408,7 +408,7 @@ DO
 }
 
 FORM (NEW1_FFNet_PatternList_to_ActivationList, U"To activations in layer", nullptr) {
-	NATURALVAR (layer, U"Layer", U"1")
+	NATURAL (layer, U"Layer", U"1")
 	OK
 DO
 	GRAPHICS_TWO (FFNet, PatternList)
@@ -419,7 +419,7 @@ DO
 /*********** FFNet & PatternList & ActivationList **********************************/
 
 FORM (REAL_FFNet_PatternList_ActivationList_getTotalCosts, U"FFNet & PatternList & ActivationList: Get total costs", U"FFNet & PatternList & ActivationList: Get total costs...") {
-	RADIOVAR (costFunctionType, U"Cost function", 1)
+	RADIO (costFunctionType, U"Cost function", 1)
 		RADIOBUTTON (U"Minimum-squared-error")
 		RADIOBUTTON (U"Minimum-cross-entropy")
 	OK
@@ -430,7 +430,7 @@ DO
 }
 
 FORM (REAL_FFNet_PatternList_ActivationList_getAverageCosts, U"FFNet & PatternList & ActivationList: Get average costs", U"FFNet & PatternList & ActivationList: Get average costs...") {
-	RADIOVAR (costFunctionType, U"Cost function", 1)
+	RADIO (costFunctionType, U"Cost function", 1)
 		RADIOBUTTON (U"Minimum-squared-error")
 		RADIOBUTTON (U"Minimum-cross-entropy")
 	OK
@@ -442,9 +442,9 @@ DO
 
 FORM (MODIFY_FFNet_PatternList_ActivationList_learn, U"FFNet & PatternList & ActivationList: Learn", nullptr) {
 	// NATURAL (U"Layer", U"1")
-	NATURALVAR (maximumNumberOfEpochs, U"Maximum number of epochs", U"100")
-	POSITIVEVAR (tolerance, U"Tolerance of minimizer", U"1e-7")
-	RADIOVAR (costFunctionType, U"Cost function", 1)
+	NATURAL (maximumNumberOfEpochs, U"Maximum number of epochs", U"100")
+	POSITIVE (tolerance, U"Tolerance of minimizer", U"1e-7")
+	RADIO (costFunctionType, U"Cost function", 1)
 		RADIOBUTTON (U"Minimum-squared-error")
 		RADIOBUTTON (U"Minimum-cross-entropy")
 	OK
@@ -457,12 +457,12 @@ DO
 
 FORM (MODIFY_FFNet_PatternList_ActivationList_learnSlow, U"FFNet & PatternList & ActivationList: Learn slow", nullptr) {
 	// NATURAL (U"Layer", U"1")
-	NATURALVAR (maximumNumberOfEpochs, U"Maximum number of epochs", U"100")
-	POSITIVEVAR (tolerance, U"Tolerance of minimizer", U"1e-7")
+	NATURAL (maximumNumberOfEpochs, U"Maximum number of epochs", U"100")
+	POSITIVE (tolerance, U"Tolerance of minimizer", U"1e-7")
 	LABEL (U"Specifics", U"Specific for this minimization")
-	POSITIVEVAR (learningRate, U"Learning rate", U"0.1")
-	REALVAR (momentum, U"Momentum", U"0.9")
-	RADIOVAR (costFunctionType, U"Cost function", 1)
+	POSITIVE (learningRate, U"Learning rate", U"0.1")
+	REAL (momentum, U"Momentum", U"0.9")
+	RADIO (costFunctionType, U"Cost function", 1)
 		RADIOBUTTON (U"Minimum-squared-error")
 		RADIOBUTTON (U"Minimum-cross-entropy")
 	OK
@@ -475,7 +475,7 @@ DO
 /*********** FFNet & PatternList & Categories **********************************/
 
 FORM (REAL_FFNet_PatternList_Categories_getTotalCosts, U"FFNet & PatternList & Categories: Get total costs", U"FFNet & PatternList & Categories: Get total costs...") {
-	RADIOVAR (costFunctionType, U"Cost function", 1)
+	RADIO (costFunctionType, U"Cost function", 1)
 		RADIOBUTTON (U"Minimum-squared-error")
 		RADIOBUTTON (U"Minimum-cross-entropy")
 	OK
@@ -486,7 +486,7 @@ DO
 }
 
 FORM (REAL_FFNet_PatternList_Categories_getAverageCosts, U"FFNet & PatternList & Categories: Get average costs", U"FFNet & PatternList & Categories: Get average costs...") {
-	RADIOVAR (costFunctionType, U"Cost function", 1)
+	RADIO (costFunctionType, U"Cost function", 1)
 		RADIOBUTTON (U"Minimum-squared-error")
 		RADIOBUTTON (U"Minimum-cross-entropy")
 	OK
@@ -497,9 +497,9 @@ DO
 }
 
 FORM (MODIFY_FFNet_PatternList_Categories_learn, U"FFNet & PatternList & Categories: Learn", U"FFNet & PatternList & Categories: Learn...") {
-	NATURALVAR (maximumNumberOfEpochs, U"Maximum number of epochs", U"100")
-	POSITIVEVAR (tolerance, U"Tolerance of minimizer", U"1e-7")
-	RADIOVAR (costFunctionType, U"Cost function", 1)
+	NATURAL (maximumNumberOfEpochs, U"Maximum number of epochs", U"100")
+	POSITIVE (tolerance, U"Tolerance of minimizer", U"1e-7")
+	RADIO (costFunctionType, U"Cost function", 1)
 		RADIOBUTTON (U"Minimum-squared-error")
 		RADIOBUTTON (U"Minimum-cross-entropy")
 	OK
@@ -510,12 +510,12 @@ DO
 }
 
 FORM (MODIFY_FFNet_PatternList_Categories_learnSlow, U"FFNet & PatternList & Categories: Learn slow", U"FFNet & PatternList & Categories: Learn slow...") {
-	NATURALVAR (maximumNumberOfEpochs, U"Maximum number of epochs", U"100")
-	POSITIVEVAR (tolerance, U"Tolerance of minimizer", U"1e-7")
+	NATURAL (maximumNumberOfEpochs, U"Maximum number of epochs", U"100")
+	POSITIVE (tolerance, U"Tolerance of minimizer", U"1e-7")
 	LABEL (U"Specifics", U"Specific for this minimization")
-	POSITIVEVAR (learningRate, U"Learning rate", U"0.1")
-	REALVAR (momentum, U"Momentum", U"0.9")
-	RADIOVAR (costFunctionType, U"Cost function", 1)
+	POSITIVE (learningRate, U"Learning rate", U"0.1")
+	REAL (momentum, U"Momentum", U"0.9")
+	RADIO (costFunctionType, U"Cost function", 1)
 		RADIOBUTTON (U"Minimum-squared-error")
 		RADIOBUTTON (U"Minimum-cross-entropy")
 	OK
@@ -528,14 +528,14 @@ DO
 /*********** FFNet & PCA **********************************/
 
 FORM (GRAPHICS_FFNet_PCA_drawDecisionPlaneInEigenspace, U"FFNet & PCA: Draw decision plane", nullptr) {
-	NATURALVAR (unitNumber, U"Unit number", U"1")
-	NATURALVAR (layer, U"Layer number", U"1")
-	NATURALVAR (horizontalEigenvectorNumber, U"Horizontal eigenvector number", U"1")
-	NATURALVAR (verticalEigenvectorNumber, U"Vertical eigenvector number", U"2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
+	NATURAL (unitNumber, U"Unit number", U"1")
+	NATURAL (layer, U"Layer number", U"1")
+	NATURAL (horizontalEigenvectorNumber, U"Horizontal eigenvector number", U"1")
+	NATURAL (verticalEigenvectorNumber, U"Vertical eigenvector number", U"2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
 	OK
 DO
 	GRAPHICS_TWO (FFNet, PCA)
@@ -546,8 +546,8 @@ DO
 /*********** PatternList & Categories **********************************/
 
 FORM (NEW1_PatternList_Categories_to_FFNet, U"PatternList & Categories: To FFNet", U"PatternList & Categories: To FFNet...") {
-	INTEGERVAR (numberOfUnitsInHiddenLayer1, U"Number of units in hidden layer 1", U"0")
-	INTEGERVAR (numberOfUnitsInHiddenLayer2, U"Number of units in hidden layer 2", U"0")
+	INTEGER (numberOfUnitsInHiddenLayer1, U"Number of units in hidden layer 1", U"0")
+	INTEGER (numberOfUnitsInHiddenLayer2, U"Number of units in hidden layer 2", U"0")
 	OK
 DO
 	CONVERT_TWO (PatternList, Categories)
diff --git a/LPC/praat_LPC_init.cpp b/LPC/praat_LPC_init.cpp
index 987f7e4..8c86a4a 100644
--- a/LPC/praat_LPC_init.cpp
+++ b/LPC/praat_LPC_init.cpp
@@ -56,8 +56,8 @@
 #include "praat_Matrix.h"
 
 #define praat_Quefrency_RANGE(fromQuefrency,toQuefrency) \
-	REALVAR (fromQuefrency, U"left Quefrency range (s)", U"0.0") \
-	REALVAR (toQuefrency, U"right Quefrency range (s)", U"0.0 (= all)")
+	REAL (fromQuefrency, U"left Quefrency range (s)", U"0.0") \
+	REAL (toQuefrency, U"right Quefrency range (s)", U"0.0 (= all)")
 
 static const char32 *DRAW_BUTTON    = U"Draw -";
 static const char32 *QUERY_BUTTON   = U"Query -";
@@ -80,9 +80,9 @@ DIRECT (HELP_PowerCepstrum_help) {
 
 FORM (GRAPHICS_Cepstrum_drawLinear, U"Cepstrum: Draw linear", U"Cepstrum: Draw (linear)...") {
 	praat_Quefrency_RANGE(fromQuefrency,toQuefrency)
-	REALVAR (ymin, U"Minimum", U"0.0")
-	REALVAR (ymax, U"Maximum", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (ymin, U"Minimum", U"0.0")
+	REAL (ymax, U"Maximum", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Cepstrum)
@@ -92,9 +92,9 @@ DO
 
 FORM (GRAPHICS_PowerCepstrum_draw, U"PowerCepstrum: Draw", U"PowerCepstrum: Draw...") {
 	praat_Quefrency_RANGE(fromQuefrency,toQuefrency)
-	REALVAR (ymin, U"Minimum (dB)", U"0.0")
-	REALVAR (ymax, U"Maximum (dB)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (ymin, U"Minimum (dB)", U"0.0")
+	REAL (ymax, U"Maximum (dB)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (PowerCepstrum)
@@ -104,15 +104,15 @@ DO
 
 FORM (GRAPHICS_PowerCepstrum_drawTiltLine, U"PowerCepstrum: Draw tilt line", U"PowerCepstrum: Draw tilt line...") {
 	praat_Quefrency_RANGE(fromQuefrency,toQuefrency)
-	REALVAR (fromAmplitude_dB, U"left Amplitude range (dB)", U"0.0")
-	REALVAR (toAmplitude_dB, U"right Amplitude range (dB)", U"0.0")
+	REAL (fromAmplitude_dB, U"left Amplitude range (dB)", U"0.0")
+	REAL (toAmplitude_dB, U"right Amplitude range (dB)", U"0.0")
 	LABEL (U"", U"Parameters for the tilt line fit")
-	REALVAR (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
-	REALVAR (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
-	OPTIONMENUVAR (lineType, U"Line type", 1)
+	REAL (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
+	REAL (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
+	OPTIONMENU (lineType, U"Line type", 1)
 		OPTION (U"Straight")
 		OPTION (U"Exponential decay")
-	OPTIONMENUVAR (fitMethod, U"Fit method", 2)
+	OPTIONMENU (fitMethod, U"Fit method", 2)
 		OPTION (U"Least squares")
 		OPTION (U"Robust")
 	OK
@@ -125,7 +125,7 @@ DO
 FORM (MODIFY_PowerCepstrum_formula, U"PowerCepstrum: Formula...", U"PowerCepstrum: Formula...") {
 	LABEL (U"label", U"y := y1; for row := 1 to nrow do { x := x1; "
 		"for col := 1 to ncol do { self [row, col] := `formula' ; x := x + dx } y := y + dy }")
-	TEXTVAR (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH (PowerCepstrum)
@@ -134,9 +134,9 @@ DO
 }
 
 FORM (REAL_PowerCepstrum_getPeak, U"PowerCepstrum: Get peak", nullptr) {
-	REALVAR (fromPitch, U"left Search peak in pitch range (Hz)", U"60.0")
-	REALVAR (toPitch, U"right Search peak in pitch range (Hz)", U"333.3")
-	RADIOVAR (interpolationMethod, U"Interpolation", 2)
+	REAL (fromPitch, U"left Search peak in pitch range (Hz)", U"60.0")
+	REAL (toPitch, U"right Search peak in pitch range (Hz)", U"333.3")
+	RADIO (interpolationMethod, U"Interpolation", 2)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -150,9 +150,9 @@ DO
 }
 
 FORM (REAL_PowerCepstrum_getQuefrencyOfPeak, U"PowerCepstrum: Get quefrency of peak", nullptr) {
-	REALVAR (fromPitch, U"left Search peak in pitch range (Hz)", U"60.0")
-	REALVAR (toPitch, U"right Search peak in pitch range (Hz)", U"333.3")
-	RADIOVAR (interpolationMethod, U"Interpolation", 2)
+	REAL (fromPitch, U"left Search peak in pitch range (Hz)", U"60.0")
+	REAL (toPitch, U"right Search peak in pitch range (Hz)", U"333.3")
+	RADIO (interpolationMethod, U"Interpolation", 2)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -167,9 +167,9 @@ DO
 }
 
 FORM (REAL_PowerCepstrum_getRNR, U"PowerCepstrum: Get rhamonics to noise ration", nullptr) {
-	REALVAR (fromPitch, U"left Pitch range (Hz)", U"60.0")
-	REALVAR (toPitch, U"right Pitch range (Hz)", U"333.3")
-	POSITIVEVAR (fractionalWIdth, U"Fractional width (0-1)", U"0.05")
+	REAL (fromPitch, U"left Pitch range (Hz)", U"60.0")
+	REAL (toPitch, U"right Pitch range (Hz)", U"333.3")
+	POSITIVE (fractionalWIdth, U"Fractional width (0-1)", U"0.05")
 	OK
 DO
 	NUMBER_ONE (PowerCepstrum)
@@ -178,8 +178,8 @@ DO
 }
 
 FORM (REAL_PowerCepstrum_getPeakProminence_hillenbrand, U"PowerCepstrum: Get peak prominence (hillenbrand)", U"PowerCepstrum: Get peak prominence (hillenbrand)...") {
-	REALVAR (fromPitch, U"left Search peak in pitch range (Hz)", U"60.0")
-	REALVAR (toPitch, U"right Search peak in pitch range (Hz)", U"333.3")
+	REAL (fromPitch, U"left Search peak in pitch range (Hz)", U"60.0")
+	REAL (toPitch, U"right Search peak in pitch range (Hz)", U"333.3")
 	OK
 DO
 	NUMBER_ONE (PowerCepstrum)
@@ -188,12 +188,12 @@ DO
 }
 
 FORM (REAL_PowerCepstrum_getTiltLineSlope, U"PowerCepstrum: Get tilt line slope", nullptr) {
-	REALVAR (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
-	REALVAR (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
-	OPTIONMENUVAR (lineType, U"Line type", 1)
+	REAL (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
+	REAL (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
+	OPTIONMENU (lineType, U"Line type", 1)
 		OPTION (U"Straight")
 		OPTION (U"Exponential decay")
-	OPTIONMENUVAR (fitMethod, U"Fit method", 2)
+	OPTIONMENU (fitMethod, U"Fit method", 2)
 		OPTION (U"Least squares")
 		OPTION (U"Robust")
 	OK
@@ -206,12 +206,12 @@ DO
 
 
 FORM (REAL_PowerCepstrum_getTiltLineIntercept, U"PowerCepstrum: Get tilt line intercept", nullptr) {
-	REALVAR (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
-	REALVAR (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
-	OPTIONMENUVAR (lineType, U"Line type", 1)
+	REAL (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
+	REAL (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
+	OPTIONMENU (lineType, U"Line type", 1)
 		OPTION (U"Straight")
 		OPTION (U"Exponential decay")
-	OPTIONMENUVAR (fitMethod, U"Fit method", 2)
+	OPTIONMENU (fitMethod, U"Fit method", 2)
 	OPTION (U"Least squares")
 	OPTION (U"Robust")
 	OK
@@ -223,19 +223,19 @@ DO
 }
 
 FORM (REAL_PowerCepstrum_getPeakProminence, U"PowerCepstrum: Get peak prominence", U"PowerCepstrum: Get peak prominence...") {
-	REALVAR (fromPitch, U"left Search peak in pitch range (Hz)", U"60.0")
-	REALVAR (toPitch, U"right Search peak in pitch range (Hz)", U"333.3")
-	RADIOVAR (interpolationMethod, U"Interpolation", 2)
+	REAL (fromPitch, U"left Search peak in pitch range (Hz)", U"60.0")
+	REAL (toPitch, U"right Search peak in pitch range (Hz)", U"333.3")
+	RADIO (interpolationMethod, U"Interpolation", 2)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
 		RADIOBUTTON (U"Sinc70")
-	REALVAR (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
-	REALVAR (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
-	OPTIONMENUVAR (lineType, U"Line type", 1)
+	REAL (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
+	REAL (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
+	OPTIONMENU (lineType, U"Line type", 1)
 		OPTION (U"Straight")
 		OPTION (U"Exponential decay")
-	OPTIONMENUVAR (fitMethod, U"Fit method", 2)
+	OPTIONMENU (fitMethod, U"Fit method", 2)
 		OPTION (U"Least squares")
 		OPTION (U"Robust")
 	OK
@@ -246,12 +246,12 @@ DO
 }
 
 FORM (MODIFY_PowerCepstrum_subtractTilt_inline, U"PowerCepstrum: Subtract tilt (in-line)", nullptr) {
-	REALVAR (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
-	REALVAR (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
-	OPTIONMENUVAR (lineType, U"Line type", 1)
+	REAL (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
+	REAL (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
+	OPTIONMENU (lineType, U"Line type", 1)
 		OPTION (U"Straight")
 		OPTION (U"Exponential decay")
-	OPTIONMENUVAR (fitMethod, U"Fit method", 2)
+	OPTIONMENU (fitMethod, U"Fit method", 2)
 		OPTION (U"Least squares")
 		OPTION (U"Robust")
 	OK
@@ -262,8 +262,8 @@ DO
 }
 
 FORM (MODIFY_PowerCepstrum_smooth_inline, U"PowerCepstrum: Smooth (in-line)", nullptr) {
-	REALVAR (quefrencySmoothingWindowDuration, U"Quefrency averaging window (s)", U"0.0005")
-	NATURALVAR (numberOfIterations, U"Number of iterations", U"1");
+	REAL (quefrencySmoothingWindowDuration, U"Quefrency averaging window (s)", U"0.0005")
+	NATURAL (numberOfIterations, U"Number of iterations", U"1");
 	OK
 DO
 	MODIFY_EACH (PowerCepstrum)
@@ -272,8 +272,8 @@ DO
 }
 
 FORM (NEW_PowerCepstrum_smooth, U"PowerCepstrum: Smooth", nullptr) {
-	REALVAR (quefrencySmoothingWindowDuration, U"Quefrency averaging window (s)", U"0.0005")
-	NATURALVAR (numberOfIterations, U"Number of iterations", U"1");
+	REAL (quefrencySmoothingWindowDuration, U"Quefrency averaging window (s)", U"0.0005")
+	NATURAL (numberOfIterations, U"Number of iterations", U"1");
 	OK
 DO
 	CONVERT_EACH (PowerCepstrum)
@@ -282,12 +282,12 @@ DO
 }
 
 FORM (NEW_PowerCepstrum_subtractTilt, U"PowerCepstrum: Subtract tilt", nullptr) {
-	REALVAR (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
-	REALVAR (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
-	OPTIONMENUVAR (lineType, U"Line type", 1)
+	REAL (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
+	REAL (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
+	OPTIONMENU (lineType, U"Line type", 1)
 		OPTION (U"Straight")
 		OPTION (U"Exponential decay")
-	OPTIONMENUVAR (fitMethod, U"Fit method", 2)
+	OPTIONMENU (fitMethod, U"Fit method", 2)
 		OPTION (U"Least squares")
 		OPTION (U"Robust")
 	OK
@@ -318,9 +318,9 @@ DIRECT (HELP_PowerCepstrogram_help) {
 FORM (GRAPHICS_old_PowerCepstrogram_paint, U"PowerCepstrogram: Paint", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
 	praat_Quefrency_RANGE(fromQuefrency,toQuefrency)
-	REALVAR (minimum_dB, U"Minimum (dB)", U"0.0")
-	REALVAR (maximum_dB, U"Maximum (dB)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	REAL (minimum_dB, U"Minimum (dB)", U"0.0")
+	REAL (maximum_dB, U"Maximum (dB)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true);
 	OK
 DO
 	GRAPHICS_EACH (PowerCepstrogram)
@@ -331,11 +331,11 @@ DO
 FORM (GRAPHICS_PowerCepstrogram_paint, U"PowerCepstrogram: Paint", U"PowerCepstrogram: Paint...") {
 	praat_TimeFunction_RANGE(fromTime,toTime)
 	praat_Quefrency_RANGE(fromQuefrency,toQuefrency)
-	REALVAR (maximum_dB, U"Maximum (dB)", U"80.0")
-	BOOLEANVAR (autoscaling, U"Autoscaling", false);
-	REALVAR (dynamicRange_dB, U"Dynamic range (dB)", U"30.0");
-	REALVAR (compression, U"Dynamic compression (0-1)", U"0.0");
-	BOOLEANVAR (garnish, U"Garnish", true);
+	REAL (maximum_dB, U"Maximum (dB)", U"80.0")
+	BOOLEAN (autoscaling, U"Autoscaling", false);
+	REAL (dynamicRange_dB, U"Dynamic range (dB)", U"30.0");
+	REAL (compression, U"Dynamic compression (0-1)", U"0.0");
+	BOOLEAN (garnish, U"Garnish", true);
 	OK
 DO_ALTERNATIVE (GRAPHICS_old_PowerCepstrogram_paint)
 	GRAPHICS_EACH (PowerCepstrogram)
@@ -344,8 +344,8 @@ DO_ALTERNATIVE (GRAPHICS_old_PowerCepstrogram_paint)
 }
 
 FORM (NEW_PowerCepstrogram_smooth, U"PowerCepstrogram: Smooth", U"PowerCepstrogram: Smooth...") {
-	REALVAR (smoothingWindowDuration, U"Time averaging window (s)", U"0.02")
-	REALVAR (quefrencySmoothingWindowDuration, U"Quefrency averaging window (s)", U"0.0005")
+	REAL (smoothingWindowDuration, U"Time averaging window (s)", U"0.02")
+	REAL (quefrencySmoothingWindowDuration, U"Quefrency averaging window (s)", U"0.0005")
 	OK
 DO
 	CONVERT_EACH (PowerCepstrogram)
@@ -378,12 +378,12 @@ DIRECT (REAL_PowerCepstrogram_getQuefrencyStep) {
 }
 
 FORM (NEW_PowerCepstrogram_subtractTilt, U"PowerCepstrogram: Subtract tilt", nullptr) {
-	REALVAR (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
-	REALVAR (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
-	OPTIONMENUVAR (lineType, U"Line type", 2)
+	REAL (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
+	REAL (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
+	OPTIONMENU (lineType, U"Line type", 2)
 		OPTION (U"Straight")
 		OPTION (U"Exponential decay")
-	OPTIONMENUVAR (fitMethod, U"Fit method", 2)
+	OPTIONMENU (fitMethod, U"Fit method", 2)
 		OPTION (U"Least squares")
 		OPTION (U"Robust")
 	OK
@@ -394,12 +394,12 @@ DO
 }
 
 FORM (MODIFY_PowerCepstrogram_subtractTilt_inline, U"PowerCepstrogram: Subtract tilt (in-line)", nullptr) {
-	REALVAR (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
-	REALVAR (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
-	OPTIONMENUVAR (lineType, U"Line type", 2)
+	REAL (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
+	REAL (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
+	OPTIONMENU (lineType, U"Line type", 2)
 		OPTION (U"Straight")
 		OPTION (U"Exponential decay")
-	OPTIONMENUVAR (fitMethod, U"Fit method", 2)
+	OPTIONMENU (fitMethod, U"Fit method", 2)
 		OPTION (U"Least squares")
 		OPTION (U"Robust")
 	OK
@@ -411,12 +411,12 @@ DO
 
 FORM (REAL_PowerCepstrogram_getCPPS_hillenbrand, U"PowerCepstrogram: Get CPPS", nullptr) {
 	LABEL (U"", U"Smoothing:")
-	BOOLEANVAR (subtractTiltBeforeSmoothing, U"Subtract tilt before smoothing", true)
-	REALVAR (smoothinWindowDuration, U"Time averaging window (s)", U"0.001")
-	REALVAR (quefrencySmoothinWindowDuration, U"Quefrency averaging window (s)", U"0.00005")
+	BOOLEAN (subtractTiltBeforeSmoothing, U"Subtract tilt before smoothing", true)
+	REAL (smoothinWindowDuration, U"Time averaging window (s)", U"0.001")
+	REAL (quefrencySmoothinWindowDuration, U"Quefrency averaging window (s)", U"0.00005")
 	LABEL (U"", U"Peak search:")
-	REALVAR (fromPitch, U"left Peak search pitch range (Hz)", U"60.0")
-	REALVAR (toPitch, U"right Peak search pitch range (Hz)", U"330.0")
+	REAL (fromPitch, U"left Peak search pitch range (Hz)", U"60.0")
+	REAL (toPitch, U"right Peak search pitch range (Hz)", U"330.0")
 	OK
 DO
 	NUMBER_ONE (PowerCepstrogram)
@@ -426,25 +426,25 @@ DO
 
 FORM (REAL_PowerCepstrogram_getCPPS, U"PowerCepstrogram: Get CPPS", nullptr) {
 	LABEL (U"", U"Smoothing:")
-	BOOLEANVAR (subtractTiltBeforeSmoothing, U"Subtract tilt before smoothing", true)
-	REALVAR (smoothingWindowDuration, U"Time averaging window (s)", U"0.02")
-	REALVAR (quefrencySmoothingWindowDuration, U"Quefrency averaging window (s)", U"0.0005")
+	BOOLEAN (subtractTiltBeforeSmoothing, U"Subtract tilt before smoothing", true)
+	REAL (smoothingWindowDuration, U"Time averaging window (s)", U"0.02")
+	REAL (quefrencySmoothingWindowDuration, U"Quefrency averaging window (s)", U"0.0005")
 	LABEL (U"", U"Peak search:")
-	REALVAR (fromPitch, U"left Peak search pitch range (Hz)", U"60.0")
-	REALVAR (toPitch, U"right Peak search pitch range (Hz)", U"330.0")
-	POSITIVEVAR (tolerance, U"Tolerance (0-1)", U"0.05")
-	RADIOVAR (interpolationMethod, U"Interpolation", 2)
+	REAL (fromPitch, U"left Peak search pitch range (Hz)", U"60.0")
+	REAL (toPitch, U"right Peak search pitch range (Hz)", U"330.0")
+	POSITIVE (tolerance, U"Tolerance (0-1)", U"0.05")
+	RADIO (interpolationMethod, U"Interpolation", 2)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
 		RADIOBUTTON (U"Sinc70")
 	LABEL (U"", U"Tilt line:")
-	REALVAR (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
-	REALVAR (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
-	OPTIONMENUVAR (lineType, U"Line type", 2)
+	REAL (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
+	REAL (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
+	OPTIONMENU (lineType, U"Line type", 2)
 		OPTION (U"Straight")
 		OPTION (U"Exponential decay")
-	OPTIONMENUVAR (fitMethod, U"Fit method", 2)
+	OPTIONMENU (fitMethod, U"Fit method", 2)
 		OPTION (U"Least squares")
 		OPTION (U"Robust")
 	OK
@@ -460,7 +460,7 @@ FORM (MODIFY_PowerCepstrogram_formula, U"PowerCepstrogram: Formula", nullptr) {
 	LABEL (U"label", U"   `y' is the quefrency in seconds")
 	LABEL (U"label", U"   `self' is the current value")
 	LABEL (U"label", U"   Replace all values with:")
-	TEXTVAR (formula, U"formula", U"sqrt(self)")
+	TEXTFIELD (formula, U"formula", U"sqrt(self)")
 	OK
 DO
 	MODIFY_EACH_WEAK (PowerCepstrogram)
@@ -469,7 +469,7 @@ DO
 }
 
 FORM (NEW_PowerCepstrogram_to_PowerCepstrum_slice, U"PowerCepstrogram: To PowerCepstrum (slice)", nullptr) {
-	REALVAR (time, U"Time (s)", U"0.1")
+	REAL (time, U"Time (s)", U"0.1")
 	OK
 DO
 	CONVERT_EACH (PowerCepstrogram)
@@ -478,20 +478,20 @@ DO
 }
 
 FORM (NEW_PowerCepstrogram_to_Table_cpp, U"PowerCepstrogram: To Table (peak prominence)", U"PowerCepstrogram: To Table (peak prominence)...") {
-	REALVAR (fromPitch, U"left Peak search pitch range (Hz)", U"60.0")
-	REALVAR (toPitch, U"right Peak search pitch range (Hz)", U"330.0")
-	POSITIVEVAR (tolerance, U"Tolerance (0-1)", U"0.05")
-	RADIOVAR (interpolationMethod, U"Interpolation", 2)
+	REAL (fromPitch, U"left Peak search pitch range (Hz)", U"60.0")
+	REAL (toPitch, U"right Peak search pitch range (Hz)", U"330.0")
+	POSITIVE (tolerance, U"Tolerance (0-1)", U"0.05")
+	RADIO (interpolationMethod, U"Interpolation", 2)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
 		RADIOBUTTON (U"Sinc70")
-	REALVAR (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
-	REALVAR (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
-	OPTIONMENUVAR (lineType, U"Line type", 2)
+	REAL (fromQuefrency_tiltLine, U"left Tilt line quefrency range (s)", U"0.001")
+	REAL (toQuefrency_tiltLine, U"right Tilt line quefrency range (s)", U"0.0 (= end)")
+	OPTIONMENU (lineType, U"Line type", 2)
 		OPTION (U"Straight")
 		OPTION (U"Exponential decay")
-	OPTIONMENUVAR (fitMethod, U"Fit method", 2)
+	OPTIONMENU (fitMethod, U"Fit method", 2)
 		OPTION (U"Least squares")
 		OPTION (U"Robust")
 	OK
@@ -502,8 +502,8 @@ DO
 }
 
 FORM (NEW_PowerCepstrogram_to_Table_hillenbrand, U"PowerCepstrogram: To Table (hillenbrand)", U"PowerCepstrogram: To Table (peak prominence...") {
-	REALVAR (fromPitch, U"left Peak search pitch range (Hz)", U"60.0")
-	REALVAR (toPitch, U"right Peak search pitch range (Hz)", U"330.0")
+	REAL (fromPitch, U"left Peak search pitch range (Hz)", U"60.0")
+	REAL (toPitch, U"right Peak search pitch range (Hz)", U"330.0")
 	OK
 DO
 	CONVERT_EACH (PowerCepstrogram)
@@ -527,15 +527,15 @@ DIRECT (NEW_Cepstrumc_to_LPC) {
 
 FORM (NEW1_Cepstrumc_to_DTW, U"Cepstrumc: To DTW", U"Cepstrumc: To DTW...") {
 	LABEL (U"", U"Distance calculation between Cepstra")
-	REALVAR (cepstralWeight, U"Cepstral weight", U"1.0")
-	REALVAR (logEnergyWeight, U"Log energy weight", U"0.0")
-	REALVAR (regressionWeight, U"Regression weight", U"0.0")
-	REALVAR (regressionLogEnergyWeight, U"Regression weight log energy", U"0.0")
-	REALVAR (windowDuration, U"Window for regression coefficients (seconds)", U"0.056")
+	REAL (cepstralWeight, U"Cepstral weight", U"1.0")
+	REAL (logEnergyWeight, U"Log energy weight", U"0.0")
+	REAL (regressionWeight, U"Regression weight", U"0.0")
+	REAL (regressionLogEnergyWeight, U"Regression weight log energy", U"0.0")
+	REAL (windowDuration, U"Window for regression coefficients (seconds)", U"0.056")
 	LABEL (U"", U"Boundary conditions for time warp")
-	BOOLEANVAR (matchBeginPositions, U"Match begin positions", false)
-	BOOLEANVAR (matchEndPositions, U"Match end positions", false)
-	RADIOVAR (slopeConstraintType, U"Slope constraints", 1)
+	BOOLEAN (matchBeginPositions, U"Match begin positions", false)
+	BOOLEAN (matchEndPositions, U"Match end positions", false)
+	RADIO (slopeConstraintType, U"Slope constraints", 1)
 		RADIOBUTTON (U"no restriction")
 		RADIOBUTTON (U"1/3 < slope < 3")
 		RADIOBUTTON (U"1/2 < slope < 2")
@@ -556,7 +556,7 @@ DIRECT (NEW_Cepstrumc_to_Matrix) {
 /******************** Formant ********************************************/
 
 FORM (NEW_Formant_to_LPC, U"Formant: To LPC", nullptr) {
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"16000.0")
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"16000.0")
 	OK
 DO
 	CONVERT_EACH (Formant)
@@ -566,11 +566,11 @@ DO
 
 FORM (MODIFY_Formant_formula, U"Formant: Formula", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	NATURALVAR (fromFormant, U"left Formant range", U"1")
-	NATURALVAR (toFormant, U"right Formant range", U"5")
+	NATURAL (fromFormant, U"left Formant range", U"1")
+	NATURAL (toFormant, U"right Formant range", U"5")
 	LABEL (U"", U"Formant frequencies in odd numbered rows")
 	LABEL (U"", U"Formant bandwidths in even numbered rows")
-	SENTENCEVAR (formula, U"Formula", U"if row mod 2 = 1 and self[row,col]/self[row+1,col] < 5 then 0 else self fi")
+	SENTENCE (formula, U"Formula", U"if row mod 2 = 1 and self[row,col]/self[row+1,col] < 5 then 0 else self fi")
 	OK
 DO
 	MODIFY_EACH_WEAK (Formant)
@@ -581,7 +581,7 @@ DO
 /******************** Formant & Spectrogram ************************************/
 
 FORM (NEW1_Formant_and_Spectrogram_to_IntensityTier, U"Formant & Spectrogram: To IntensityTier", U"Formant & Spectrogram: To IntensityTier...") {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	CONVERT_TWO (Formant, Spectrogram)
@@ -596,7 +596,7 @@ DIRECT (HELP_LFCC_help) {
 }
 
 FORM (NEW_LFCC_to_LPC, U"LFCC: To LPC", U"LFCC: To LPC...") {
-	INTEGERVAR (numberOfCoefficients, U"Number of coefficients", U"0")
+	INTEGER (numberOfCoefficients, U"Number of coefficients", U"0")
 	OK
 DO
 	REQUIRE (numberOfCoefficients >= 0, U"Number of coefficients must be greater or equal zero.")
@@ -613,9 +613,9 @@ DIRECT (HELP_LineSpectralFrequencies_help) {
 
 FORM (GRAPHICS_LineSpectralFrequencies_drawFrequencies, U"LineSpectralFrequencies: Draw frequencies", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (Hz)", U"5000.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"5000.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (LineSpectralFrequencies)
@@ -637,9 +637,9 @@ DIRECT (HELP_LPC_help) {
 
 FORM (GRAPHICS_LPC_drawGain, U"LPC: Draw gain", U"LPC: Draw gain...") {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (minimumGain, U"Minimum gain", U"0.0")
-	REALVAR (maximumGain, U"Maximum gain", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (minimumGain, U"Minimum gain", U"0.0")
+	REAL (maximumGain, U"Maximum gain", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (LPC)
@@ -654,7 +654,7 @@ DIRECT (REAL_LPC_getSamplingInterval) {
 }
 
 FORM (INTEGER_LPC_getNumberOfCoefficients, U"LPC: Get number of coefficients", U"LPC: Get number of coefficients...") {
-	NATURALVAR (frameNumber, U"Frame number", U"1")
+	NATURAL (frameNumber, U"Frame number", U"1")
 	OK
 DO
 	INTEGER_ONE (LPC)
@@ -664,8 +664,8 @@ DO
 }
 
 FORM (GRAPHICS_LPC_drawPoles, U"LPC: Draw poles", U"LPC: Draw poles...") {
-	REALVAR (time, U"Time (seconds)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (time, U"Time (seconds)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (LPC)
@@ -686,7 +686,7 @@ DIRECT (NEW_LPC_to_Formant_keep_all) {
 }
 
 FORM (NEW_LPC_to_LFCC, U"LPC: To LFCC", U"LPC: To LFCC...") {
-	INTEGERVAR (numberOfCoefficients, U"Number of coefficients", U"0")
+	INTEGER (numberOfCoefficients, U"Number of coefficients", U"0")
 	OK
 DO
 	REQUIRE (numberOfCoefficients >= 0, U"The number of coefficients should be greater than or equal to zero.")
@@ -696,7 +696,7 @@ DO
 }
 
 FORM (NEW_LPC_to_LineSpectralFrequencies, U"LPC: To LineSpectralFrequencies", nullptr) {
-	REALVAR (gridSize, U"Grid size", U"0.0")
+	REAL (gridSize, U"Grid size", U"0.0")
 	OK
 DO
 	CONVERT_EACH (LPC)
@@ -705,7 +705,7 @@ DO
 }
 
 FORM (NEW_LPC_to_Polynomial, U"LPC: To Polynomial", U"LPC: To Polynomial (slice)...") {
-	REALVAR (time, U"Time (s)", U"0.0")
+	REAL (time, U"Time (s)", U"0.0")
 	OK
 DO
 	CONVERT_EACH (LPC)
@@ -714,10 +714,10 @@ DO
 }
 
 FORM (NEW_LPC_to_Spectrum, U"LPC: To Spectrum", U"LPC: To Spectrum (slice)...") {
-	REALVAR (time, U"Time (seconds)", U"0.0")
-	REALVAR (minimumFrequencyResolution, U"Minimum frequency resolution (Hz)", U"20.0")
-	REALVAR (bandwidthReduction, U"Bandwidth reduction (Hz)", U"0.0")
-	REALVAR (deemphasisFrequency, U"De-emphasis frequency (Hz)", U"50.0")
+	REAL (time, U"Time (seconds)", U"0.0")
+	REAL (minimumFrequencyResolution, U"Minimum frequency resolution (Hz)", U"20.0")
+	REAL (bandwidthReduction, U"Bandwidth reduction (Hz)", U"0.0")
+	REAL (deemphasisFrequency, U"De-emphasis frequency (Hz)", U"50.0")
 	OK
 DO
 	CONVERT_EACH (LPC)
@@ -726,9 +726,9 @@ DO
 }
 
 FORM (NEW_LPC_to_Spectrogram, U"LPC: To Spectrogram", U"LPC: To Spectrogram...") {
-	REALVAR (minimumFrequencyResolution, U"Minimum frequency resolution (Hz)", U"20.0")
-	REALVAR (bandwidthReduction, U"Bandwidth reduction (Hz)", U"0.0")
-	REALVAR (deemphasisFrequency, U"De-emphasis frequency (Hz)", U"50.0")
+	REAL (minimumFrequencyResolution, U"Minimum frequency resolution (Hz)", U"20.0")
+	REAL (bandwidthReduction, U"Bandwidth reduction (Hz)", U"0.0")
+	REAL (deemphasisFrequency, U"De-emphasis frequency (Hz)", U"50.0")
 	OK
 DO
 	CONVERT_EACH (LPC)
@@ -737,10 +737,10 @@ DO
 }
 
 FORM (NEW_LPC_to_VocalTract_special, U"LPC: To VocalTract", U"LPC: To VocalTract (slice, special)...") {
-	REALVAR (time, U"Time (s)", U"0.0")
-	REALVAR (glottalDamping, U"Glottal damping", U"0.1")
-	BOOLEANVAR (radiationDamping, U"Radiation damping", true)
-	BOOLEANVAR (internalDamping, U"Internal damping", true)
+	REAL (time, U"Time (s)", U"0.0")
+	REAL (glottalDamping, U"Glottal damping", U"0.1")
+	BOOLEAN (radiationDamping, U"Radiation damping", true)
+	BOOLEAN (internalDamping, U"Internal damping", true)
 	OK
 DO
 	CONVERT_EACH (LPC)
@@ -749,8 +749,8 @@ DO
 }
 
 FORM (NEW_LPC_to_VocalTract, U"LPC: To VocalTract", U"LPC: To VocalTract (slice)...") {
-	REALVAR (time, U"Time (s)", U"0.0")
-	POSITIVEVAR (lenght, U"Length (m)", U"0.17")
+	REAL (time, U"Time (s)", U"0.0")
+	POSITIVE (lenght, U"Length (m)", U"0.17")
 	OK
 DO
 	CONVERT_EACH (LPC)
@@ -779,10 +779,10 @@ DIRECT (NEW_LPC_downto_Matrix_area) {
 /********************** Sound *******************************************/
 
 FORM (NEW_Sound_to_PowerCepstrogram, U"Sound: To PowerCepstrogram", U"Sound: To PowerCepstrogram...") {
-	POSITIVEVAR (pitchFloor, U"Pitch floor (Hz)", U"60.0")
-	POSITIVEVAR (timeStep,U"Time step (s)", U"0.002")
-	POSITIVEVAR (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
-	POSITIVEVAR (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50")
+	POSITIVE (pitchFloor, U"Pitch floor (Hz)", U"60.0")
+	POSITIVE (timeStep,U"Time step (s)", U"0.002")
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
+	POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -792,8 +792,8 @@ DO
 
 
 FORM (NEW_Sound_to_PowerCepstrogram_hillenbrand, U"Sound: To PowerCepstrogram (hillenbrand)", U"Sound: To PowerCepstrogram...") {
-	POSITIVEVAR (pitchFloor, U"Pitch floor (Hz)", U"60.0")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.002")
+	POSITIVE (pitchFloor, U"Pitch floor (Hz)", U"60.0")
+	POSITIVE (timeStep, U"Time step (s)", U"0.002")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -802,14 +802,14 @@ DO
 }
 	
 FORM (NEW_Sound_to_Formant_robust, U"Sound: To Formant (robust)", U"Sound: To Formant (robust)...") {
-	REALVAR (timeStep, U"Time step (s)", U"0.0 (= auto)")
-	POSITIVEVAR (maximumNumberOfFormants, U"Max. number of formants", U"5.0")
-	REALVAR (maximumFormantFrequency, U"Maximum formant (Hz)", U"5500.0 (= adult female)")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.025")
-	POSITIVEVAR (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
-	POSITIVEVAR (numberOfStandardDeviations, U"Number of std. dev.", U"1.5")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"5")
-	REALVAR (tolerance, U"Tolerance", U"0.000001")
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	POSITIVE (maximumNumberOfFormants, U"Max. number of formants", U"5.0")
+	REAL (maximumFormantFrequency, U"Maximum formant (Hz)", U"5500.0 (= adult female)")
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
+	POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
+	POSITIVE (numberOfStandardDeviations, U"Number of std. dev.", U"1.5")
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"5")
+	REAL (tolerance, U"Tolerance", U"0.000001")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -826,10 +826,10 @@ static void Sound_to_LPC_addWarning (UiForm dia) {
 
 FORM (NEW_Sound_to_LPC_auto, U"Sound: To LPC (autocorrelation)", U"Sound: To LPC (autocorrelation)...") {
 	Sound_to_LPC_addWarning (dia);
-	NATURALVAR (predictionOrder, U"Prediction order", U"16")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.025")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
-	REALVAR (preEmphasisFrequency, U"Pre-emphasis frequency (Hz)", U"50.0")
+	NATURAL (predictionOrder, U"Prediction order", U"16")
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
+	REAL (preEmphasisFrequency, U"Pre-emphasis frequency (Hz)", U"50.0")
 	OK
 DO
 	preEmphasisFrequency = preEmphasisFrequency < 0.0 ? 0.0 : preEmphasisFrequency;
@@ -840,10 +840,10 @@ DO
 
 FORM (NEW_Sound_to_LPC_covar, U"Sound: To LPC (covariance)", U"Sound: To LPC (covariance)...") {
 	Sound_to_LPC_addWarning (dia);
-	NATURALVAR (predictionOrder, U"Prediction order", U"16")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.025")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
-	REALVAR (preEmphasisFrequency, U"Pre-emphasis frequency (Hz)", U"50.0")
+	NATURAL (predictionOrder, U"Prediction order", U"16")
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
+	REAL (preEmphasisFrequency, U"Pre-emphasis frequency (Hz)", U"50.0")
 	OK
 DO
 	preEmphasisFrequency = preEmphasisFrequency < 0.0 ? 0.0 : preEmphasisFrequency;
@@ -854,10 +854,10 @@ DO
 
 FORM (NEW_Sound_to_LPC_burg, U"Sound: To LPC (burg)", U"Sound: To LPC (burg)...") {
 	Sound_to_LPC_addWarning (dia);
-	NATURALVAR (predictionOrder, U"Prediction order", U"16")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.025")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
-	REALVAR (preEmphasisFrequency, U"Pre-emphasis frequency (Hz)", U"50.0")
+	NATURAL (predictionOrder, U"Prediction order", U"16")
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
+	REAL (preEmphasisFrequency, U"Pre-emphasis frequency (Hz)", U"50.0")
 	OK
 DO
 	preEmphasisFrequency = preEmphasisFrequency < 0.0 ? 0.0 : preEmphasisFrequency;
@@ -868,12 +868,12 @@ DO
 
 FORM (NEW_Sound_to_LPC_marple, U"Sound: To LPC (marple)", U"Sound: To LPC (marple)...") {
 	Sound_to_LPC_addWarning (dia);
-	NATURALVAR (predictionOrder, U"Prediction order", U"16")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.025")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
-	REALVAR (preEmphasisFrequency, U"Pre-emphasis frequency (Hz)", U"50.0")
-	POSITIVEVAR (tolerance1, U"Tolerance 1", U"1e-6")
-	POSITIVEVAR (tolerance2, U"Tolerance 2", U"1e-6")
+	NATURAL (predictionOrder, U"Prediction order", U"16")
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
+	REAL (preEmphasisFrequency, U"Pre-emphasis frequency (Hz)", U"50.0")
+	POSITIVE (tolerance1, U"Tolerance 1", U"1e-6")
+	POSITIVE (tolerance2, U"Tolerance 2", U"1e-6")
 	OK
 DO
 	preEmphasisFrequency = preEmphasisFrequency < 0.0 ? 0.0 : preEmphasisFrequency;
@@ -883,13 +883,13 @@ DO
 }
 
 FORM (NEW_Sound_to_MFCC, U"Sound: To MFCC", U"Sound: To MFCC...") {
-	NATURALVAR (numberOfCoefficients, U"Number of coefficients", U"12")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
+	NATURAL (numberOfCoefficients, U"Number of coefficients", U"12")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
 	LABEL (U"", U"Filter bank parameters")
-	POSITIVEVAR (firstFilterFrequency, U"First filter frequency (mel)", U"100.0")
-	POSITIVEVAR (distancBetweenFilters, U"Distance between filters (mel)", U"100.0")
-	REALVAR (maximumFrequency, U"Maximum frequency (mel)", U"0.0");
+	POSITIVE (firstFilterFrequency, U"First filter frequency (mel)", U"100.0")
+	POSITIVE (distancBetweenFilters, U"Distance between filters (mel)", U"100.0")
+	REAL (maximumFrequency, U"Maximum frequency (mel)", U"0.0");
 	OK
 DO
 	REQUIRE (numberOfCoefficients < 25, U"The number of coefficients should be less than 25.")
@@ -899,9 +899,9 @@ DO
 }
 
 FORM (GRAPHICS_VocalTract_drawSegments, U"VocalTract: Draw segments", nullptr) {
-	POSITIVEVAR (maximumLength, U"Maximum length (cm)", U"20.0")
-	POSITIVEVAR (maximumArea, U"Maximum area (cm^2)", U"90.0")
-	BOOLEANVAR (glottisClosed, U"Closed at glottis", true)
+	POSITIVE (maximumLength, U"Maximum length (cm)", U"20.0")
+	POSITIVE (maximumArea, U"Maximum area (cm^2)", U"90.0")
+	BOOLEAN (glottisClosed, U"Closed at glottis", true)
 	OK
 DO
 	GRAPHICS_EACH (VocalTract)
@@ -916,7 +916,7 @@ DIRECT (REAL_VocalTract_getLength) {
 }
 
 FORM (MODIFY_VocalTract_setLength, U"", nullptr) {
-	POSITIVEVAR (length, U"New length (m)", U"0.17")
+	POSITIVE (length, U"New length (m)", U"0.17")
 	OK
 DO
 	MODIFY_EACH (VocalTract)
@@ -925,9 +925,9 @@ DO
 }
 
 FORM (NEW_VocalTract_to_VocalTractTier, U"VocalTract: To VocalTractTier", nullptr) {
-	REALVAR (fromTime, U"Tier start time (s)", U"0.0")
-	REALVAR (toTime, U"Tier end time (s)", U"1.0")
-	REALVAR (time, U"Insert at time (s)", U"0.5")
+	REAL (fromTime, U"Tier start time (s)", U"0.0")
+	REAL (toTime, U"Tier end time (s)", U"1.0")
+	REAL (time, U"Insert at time (s)", U"0.5")
 	OK
 DO
 	REQUIRE (fromTime < toTime, U"The start time must be before the end time.")
@@ -942,7 +942,7 @@ DIRECT (HELP_VocalTractTier_help) {
 }
 
 FORM (NEW_VocalTractTier_to_LPC, U"VocalTractTier: To LPC", nullptr) {
-	POSITIVEVAR (timeStep, U"Time step", U"0.005")
+	POSITIVE (timeStep, U"Time step", U"0.005")
 	OK
 DO
 	CONVERT_EACH (VocalTractTier)
@@ -951,7 +951,7 @@ DO
 }
 
 FORM (NEW_VocalTractTier_to_VocalTract, U"", nullptr) {
-	REALVAR (time, U"Time (s)", U"0.1")
+	REAL (time, U"Time (s)", U"0.1")
 	OK
 DO
 	CONVERT_EACH (VocalTractTier)
@@ -960,7 +960,7 @@ DO
 }
 
 FORM (MODIFY_VocalTractTier_addVocalTract, U"VocalTractTier: Add VocalTract", nullptr) {
-	REALVAR (time, U"Time (s)", U"0.1")
+	REAL (time, U"Time (s)", U"0.1")
 	OK
 DO
 	MODIFY_FIRST_OF_TWO (VocalTractTier, VocalTract)
@@ -971,7 +971,7 @@ DO
 /******************* LPC & Sound *************************************/
 
 FORM (NEW1_LPC_and_Sound_filter, U"LPC & Sound: Filter", U"LPC & Sound: Filter...") {
-	BOOLEANVAR (useGain, U"Use LPC gain", false)
+	BOOLEAN (useGain, U"Use LPC gain", false)
 	OK
 DO
 	CONVERT_TWO (LPC, Sound)
@@ -980,11 +980,11 @@ DO
 }
 
 FORM (NEW1_LPC_and_Sound_filterWithFilterAtTime, U"LPC & Sound: Filter with one filter at time", U"LPC & Sound: Filter with filter at time...") {
-	OPTIONMENUVAR (channel, U"Channel", 2)
+	OPTIONMENU (channel, U"Channel", 2)
 		OPTION (U"Both")
 		OPTION (U"Left")
 		OPTION (U"Right")
-	REALVAR (time, U"Use filter at time (s)", U"0.0")
+	REAL (time, U"Use filter at time (s)", U"0.0")
 	OK
 DO
 	CONVERT_TWO (LPC, Sound)
@@ -1000,11 +1000,11 @@ DIRECT (NEW1_LPC_and_Sound_filterInverse) {
 
 FORM (NEW1_LPC_and_Sound_filterInverseWithFilterAtTime, U"LPC & Sound: Filter (inverse) with filter at time",
       U"LPC & Sound: Filter (inverse) with filter at time...") {
-	OPTIONMENUVAR (channel, U"Channel", 2)
+	OPTIONMENU (channel, U"Channel", 2)
 		OPTION (U"Both")
 		OPTION (U"Left")
 		OPTION (U"Right")
-	REALVAR (time, U"Use filter at time (s)", U"0.0")
+	REAL (time, U"Use filter at time (s)", U"0.0")
 	OK
 DO
 	CONVERT_TWO (LPC, Sound)
@@ -1013,12 +1013,12 @@ DO
 }
 
 FORM (NEW1_LPC_and_Sound_to_LPC_robust, U"Robust LPC analysis", U"LPC & Sound: To LPC (robust)...") {
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.025")
-	POSITIVEVAR (preEmphasisFrequency, U"Pre-emphasis frequency (Hz)", U"50.0")
-	POSITIVEVAR (numberOfStandardDeviations, U"Number of std. dev.", U"1.5")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"5")
-	REALVAR (tolerance, U"Tolerance", U"0.000001")
-	BOOLEANVAR (locationVariable, U"Variable location", false)
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
+	POSITIVE (preEmphasisFrequency, U"Pre-emphasis frequency (Hz)", U"50.0")
+	POSITIVE (numberOfStandardDeviations, U"Number of std. dev.", U"1.5")
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"5")
+	REAL (tolerance, U"Tolerance", U"0.000001")
+	BOOLEAN (locationVariable, U"Variable location", false)
 	OK
 DO
 	CONVERT_TWO (LPC, Sound)
diff --git a/artsynth/praat_Artsynth.cpp b/artsynth/praat_Artsynth.cpp
index 87f088c..826bff9 100644
--- a/artsynth/praat_Artsynth.cpp
+++ b/artsynth/praat_Artsynth.cpp
@@ -30,7 +30,7 @@
 // MARK: - ART
 
 FORM (NEW1_Art_create, U"Create a default Articulation", U"Articulatory synthesis") {
-	WORDVAR (name, U"Name", U"articulation")
+	WORD (name, U"Name", U"articulation")
 	OK
 DO
 	CREATE_ONE
@@ -39,8 +39,9 @@ DO
 }
 
 FORM (WINDOW_Art_viewAndEdit, U"View & Edit Articulation", nullptr) {
+	static double muscles [1 + (int) kArt_muscle::MAX];
 	for (int i = 1; i <= (int) kArt_muscle::MAX; i ++)
-		REAL (kArt_muscle_getText ((kArt_muscle) i), U"0.0")
+		UiForm_addReal4 (dia, & muscles [i], kArt_muscle_getText ((kArt_muscle) i), kArt_muscle_getText ((kArt_muscle) i), U"0.0");
 OK
 	FIND_ONE (Art)
 	for (int i = 1; i <= (int) kArt_muscle::MAX; i ++)
@@ -50,15 +51,15 @@ DO
 		if (theCurrentPraatApplication -> batch)
 			Melder_throw (U"Cannot edit an Art from batch.");
 		for (int i = 1; i <= (int) kArt_muscle::MAX; i ++)
-			my art [i] = GET_REAL (kArt_muscle_getText ((kArt_muscle) i));
+			my art [i] = muscles [i];
 	END
 }
 
 // MARK: - ARTWORD
 
 FORM (NEW1_Artword_create, U"Create an empty Artword", U"Create Artword...") {
-	WORDVAR (name, U"Name", U"hallo")
-	POSITIVEVAR (duration, U"Duration (seconds)", U"1.0")
+	WORD (name, U"Name", U"hallo")
+	POSITIVE (duration, U"Duration (seconds)", U"1.0")
 	OK
 DO
 	CREATE_ONE
@@ -67,10 +68,10 @@ DO
 }
 
 FORM (GRAPHICS_Artword_draw, U"Draw one Artword tier", nullptr) {
-	OPTIONMENUVAR (muscle, U"Muscle", (int) kArt_muscle::LUNGS)
+	OPTIONMENU (muscle, U"Muscle", (int) kArt_muscle::LUNGS)
 	for (int ienum = 1; ienum <= (int) kArt_muscle::MAX; ienum ++)
 		OPTION (kArt_muscle_getText ((kArt_muscle) ienum))
-	BOOLEANVAR (garnish, U"Garnish", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Artword)
@@ -88,8 +89,8 @@ DIRECT (WINDOW_Artword_viewAndEdit) {
 }
 
 FORM (REAL_Artword_getTarget, U"Get one Artword target", nullptr) {
-	REALVAR (time, U"Time (seconds)", U"0.0")
-	OPTIONMENUVAR (muscle, U"Muscle", (int) kArt_muscle::LUNGS)
+	REAL (time, U"Time (seconds)", U"0.0")
+	OPTIONMENU (muscle, U"Muscle", (int) kArt_muscle::LUNGS)
 	for (int ienum = 1; ienum <= (int) kArt_muscle::MAX; ienum ++)
 		OPTION (kArt_muscle_getText ((kArt_muscle) ienum))
 	OK
@@ -104,9 +105,9 @@ DIRECT (HELP_Artword_help) {
 }
 
 FORM (MODIFY_Artword_setTarget, U"Set one Artword target", nullptr) {
-	REALVAR (time, U"Time (seconds)", U"0.0")
-	REALVAR (targetValue, U"Target value (0-1)", U"0.0")
-	OPTIONMENUVAR (muscle, U"Muscle", (int) kArt_muscle::LUNGS)
+	REAL (time, U"Time (seconds)", U"0.0")
+	REAL (targetValue, U"Target value (0-1)", U"0.0")
+	OPTIONMENU (muscle, U"Muscle", (int) kArt_muscle::LUNGS)
 	for (int ienum = 1; ienum <= (int) kArt_muscle::MAX; ienum ++)
 		OPTION (kArt_muscle_getText ((kArt_muscle) ienum))
 	OK
@@ -118,7 +119,7 @@ DO
 }
 
 FORM (NEW_Artword_to_Art, U"From Artword to Art", nullptr) {
-	REALVAR (time, U"Time (seconds)", U"0.0")
+	REAL (time, U"Time (seconds)", U"0.0")
 	OK
 DO
 	CONVERT_EACH (Artword)
@@ -155,7 +156,7 @@ DIRECT (NEW1_Art_Speaker_to_VocalTract) {
 // MARK: - ARTWORD & SPEAKER
 
 FORM (GRAPHICS_Artword_Speaker_draw, U"Draw Artword & Speaker", nullptr) {
-	NATURALVAR (numberOfSteps, U"Number of steps", U"5")
+	NATURAL (numberOfSteps, U"Number of steps", U"5")
 	OK
 DO
 	GRAPHICS_TWO (Artword, Speaker)
@@ -164,17 +165,17 @@ DO
 }
 
 FORM (NEW1_Artword_Speaker_to_Sound, U"Articulatory synthesizer", U"Artword & Speaker: To Sound...") {
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"22050.0")
-	NATURALVAR (oversamplingFactor, U"Oversampling factor", U"25")
-	INTEGERVAR (width1, U"Width 1", U"0")
-	INTEGERVAR (width2, U"Width 2", U"0")
-	INTEGERVAR (width3, U"Width 3", U"0")
-	INTEGERVAR (pressure1, U"Pressure 1", U"0")
-	INTEGERVAR (pressure2, U"Pressure 2", U"0")
-	INTEGERVAR (pressure3, U"Pressure 3", U"0")
-	INTEGERVAR (velocity1, U"Velocity 1", U"0")
-	INTEGERVAR (velocity2, U"Velocity 2", U"0")
-	INTEGERVAR (velocity3, U"Velocity 3", U"0")
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"22050.0")
+	NATURAL (oversamplingFactor, U"Oversampling factor", U"25")
+	INTEGER (width1, U"Width 1", U"0")
+	INTEGER (width2, U"Width 2", U"0")
+	INTEGER (width3, U"Width 3", U"0")
+	INTEGER (pressure1, U"Pressure 1", U"0")
+	INTEGER (pressure2, U"Pressure 2", U"0")
+	INTEGER (pressure3, U"Pressure 3", U"0")
+	INTEGER (velocity1, U"Velocity 1", U"0")
+	INTEGER (velocity2, U"Velocity 2", U"0")
+	INTEGER (velocity3, U"Velocity 3", U"0")
 	OK
 DO
 	FIND_TWO (Artword, Speaker)
@@ -214,12 +215,12 @@ DIRECT (MOVIE_Artword_Speaker_Sound_movie) {
 // MARK: - SPEAKER
 
 FORM (NEW1_Speaker_create, U"Create a Speaker", U"Create Speaker...") {
-	WORDVAR (name, U"Name", U"speaker")
-	OPTIONMENUSTRVAR (kindOfSpeaker, U"Kind of speaker", 1)
+	WORD (name, U"Name", U"speaker")
+	OPTIONMENUSTR (kindOfSpeaker, U"Kind of speaker", 1)
 		OPTION (U"Female")
 		OPTION (U"Male")
 		OPTION (U"Child")
-	OPTIONMENUSTRVAR (numberOfTubesInGlottis, U"Number of tubes in glottis", 2)
+	OPTIONMENUSTR (numberOfTubesInGlottis, U"Number of tubes in glottis", 2)
 		OPTION (U"1")
 		OPTION (U"2")
 		OPTION (U"10")
@@ -237,7 +238,7 @@ DIRECT (HELP_Speaker_help) {
 // MARK: - VOCALTRACT
 
 FORM (NEW1_VocalTract_createFromPhone, U"Create Vocal Tract from phone", U"Create Vocal Tract from phone...") {
-	OPTIONMENUSTRVAR (phone, U"Phone", 1)
+	OPTIONMENUSTR (phone, U"Phone", 1)
 		OPTION (U"a")
 		OPTION (U"e")
 		OPTION (U"i")
@@ -276,7 +277,7 @@ DIRECT (GRAPHICS_VocalTract_draw) {
 FORM (MODIFY_VocalTract_formula, U"VocalTract Formula", U"Matrix: Formula...") {
 	LABEL (U"label", U"`x' is the distance form the glottis in metres, `col' is the section number, `self' is in m\u00B2")
 	LABEL (U"label", U"x := x1;   for col := 1 to ncol do { self [col] := `formula' ; x := x + dx }")
-	TEXTVAR (formula, U"formula", U"0")
+	TEXTFIELD (formula, U"formula", U"0")
 	OK
 DO
 	MODIFY_EACH_WEAK (VocalTract)
@@ -296,11 +297,11 @@ DIRECT (NEW_VocalTract_to_Matrix) {
 
 FORM (NEW_VocalTract_to_Spectrum, U"From Vocal Tract to Spectrum", nullptr) {
 	LABEL (U"", U"Compute transfer function")
-	NATURALVAR (numberOfFequencies, U"Number of frequencies", U"4097")
-	POSITIVEVAR (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
-	REALVAR (glottalDamping, U"Glottal damping", U"0.1")
-	BOOLEANVAR (radiationDamping, U"Radiation damping", true)
-	BOOLEANVAR (internalDamping, U"Internal damping", true)
+	NATURAL (numberOfFequencies, U"Number of frequencies", U"4097")
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
+	REAL (glottalDamping, U"Glottal damping", U"0.1")
+	BOOLEAN (radiationDamping, U"Radiation damping", true)
+	BOOLEAN (internalDamping, U"Internal damping", true)
 	OK
 DO
 	CONVERT_EACH (VocalTract)
diff --git a/contrib/ola/praat_contrib_Ola_KNN.cpp b/contrib/ola/praat_contrib_Ola_KNN.cpp
index 0e38d81..b2b66bd 100644
--- a/contrib/ola/praat_contrib_Ola_KNN.cpp
+++ b/contrib/ola/praat_contrib_Ola_KNN.cpp
@@ -45,23 +45,23 @@ static const char32 *EXTRACT_BUTTON = U"Extract -";
 /////////////////////////////////////////////////////////////////////////////////////////
 
 FORM (NEW1_KNN_create, U"Create kNN Classifier", U"kNN classifiers 1. What is a kNN classifier?") {
-	WORD (U"Name", U"Classifier")
+	WORD (name, U"Name", U"Classifier")
 	OK
 DO
-	autoKNN knn = KNN_create ();
-	praat_new (knn.move(), GET_STRING (U"Name"));
-END }
+	CREATE_ONE
+		autoKNN result = KNN_create ();
+	CREATE_ONE_END (name)
+}
 
 FORM (NEW1_PatternList_Categories_to_KNN, U"Create kNN classifier", U"kNN classifiers 1. What is a kNN classifier?") {
-	WORD (U"Name", U"Classifier")
-	RADIO (U"Ordering", 1)
+	WORD (name, U"Name", U"Classifier")
+	RADIOx (ordering, U"Ordering", 1, 1)
 		RADIOBUTTON (U"Random")
 		RADIOBUTTON (U"Sequential")
 	OK
 DO
-	FIND_TWO (PatternList, Categories)
-		int ordering = GET_INTEGER (U"Ordering");
-		autoKNN knn = KNN_create ();
+	CONVERT_TWO (PatternList, Categories)
+		autoKNN result = KNN_create ();
 		switch (ordering) {
 			case 1:
 				ordering = kOla_SHUFFLE;
@@ -69,16 +69,12 @@ DO
 			case 2:
 				ordering = kOla_SEQUENTIAL;
 		}
-		int result = KNN_learn (knn.get(), me, you, kOla_REPLACE, ordering);
-		switch (result) {
-			case kOla_PATTERN_CATEGORIES_MISMATCH:
-				Melder_throw (U"The number of Categories should be equal to the number of rows in PatternList.");
-			case kOla_DIMENSIONALITY_MISMATCH:
-				Melder_throw (U"The dimensionality of PatternList should be equal to that of the instance base.");
-			default:
-				praat_new (knn.move(), GET_STRING (U"Name"));
-		}
-	END
+		int status = KNN_learn (result.get(), me, you, kOla_REPLACE, ordering);
+		if (status == kOla_PATTERN_CATEGORIES_MISMATCH)
+			Melder_throw (U"The number of Categories should be equal to the number of rows in PatternList.");
+		if (status == kOla_DIMENSIONALITY_MISMATCH)
+			Melder_throw (U"The dimensionality of PatternList should be equal to that of the instance base.");
+	CONVERT_TWO_END (name)
 }
 
 /////////////////////////////////////////////////////////////////////////////////////////
@@ -92,54 +88,50 @@ DIRECT (INTEGER_KNN_getNumberOfInstances) {
 }
 
 FORM (INTEGER_KNN_getOptimumModel, U"kNN model selection", U"kNN classifiers 1.1.2. Model selection") {
-	RADIO (U"Evaluation method", 1)
+	RADIOx (evaluationMethod, U"Evaluation method", 1, 1)
 		RADIOBUTTON (U"Leave one out")
 		RADIOBUTTON (U"10-fold cross-validation")
-	INTEGER (U"k max", U"50")
-	INTEGER (U"Number of seeds", U"10")
-	POSITIVE (U"Learning rate", U"0.2")
+	INTEGER (kmax, U"k max", U"50")
+	INTEGER (numberOfSeeds, U"Number of seeds", U"10")
+	POSITIVE (learningRate, U"Learning rate", U"0.2")
 	OK
 DO
-	FIND_ONE (KNN)
-		long k = GET_INTEGER (U"k max");
-		double lrate = GET_REAL (U"Learning rate");
-		if (k < 1 || k > my nInstances)
+	INFO_ONE (KNN)
+		if (kmax < 1 || kmax > my nInstances)
 			Melder_throw (U"Please select a value of k max such that 0 < k max < ", my nInstances + 1, U".");
-		long nseeds = GET_INTEGER (U"Number of seeds");
-		if (nseeds < 1)
-			Melder_throw (U"The number of seeds should exceed 1.");
-		int mode = GET_INTEGER (U"Evaluation method");
-		switch (mode) {
+		if (numberOfSeeds < 1)
+			Melder_throw (U"The number of seeds should exceed 1.");   // BUG
+		switch (evaluationMethod) {
 			case 1:
-				mode = kOla_LEAVE_ONE_OUT;
+				evaluationMethod = kOla_LEAVE_ONE_OUT;
 				break;
 			case 2:
-				mode = kOla_TEN_FOLD_CROSS_VALIDATION;
+				evaluationMethod = kOla_TEN_FOLD_CROSS_VALIDATION;
 				break;
 		}
 		autoFeatureWeights fws = FeatureWeights_create (my input -> nx);
 		int dist;
-		KNN_modelSearch (me, fws.get(), & k, & dist, mode, lrate, nseeds);
+		KNN_modelSearch (me, fws.get(), & kmax, & dist, evaluationMethod, learningRate, numberOfSeeds);
 		switch (dist) {
 			case kOla_SQUARED_DISTANCE_WEIGHTED_VOTING:
-				Melder_information (k, U" (vote weighting: inversed squared distance)");
+				Melder_information (kmax, U" (vote weighting: inversed squared distance)");
 				break;
 			case kOla_DISTANCE_WEIGHTED_VOTING:
-				Melder_information (k, U" (vote weighting: inversed distance)");
+				Melder_information (kmax, U" (vote weighting: inversed distance)");
 				break;
 			case kOla_FLAT_VOTING:
-				Melder_information (k, U" (vote weighting: flat)");
+				Melder_information (kmax, U" (vote weighting: flat)");
 				break;
 		}
-	END
+	INFO_ONE_END
 }
 
 FORM (REAL_KNN_evaluate, U"Evaluation", U"KNN: Get accuracy estimate...") {
-	RADIO (U"Evaluation method", 1)
+	RADIOx (evaluationMethod, U"Evaluation method", 1, 1)
 		RADIOBUTTON (U"Leave one out")
 		RADIOBUTTON (U"10-fold cross-validation")
-	INTEGER (U"k neighbours", U"1")
-	RADIO (U"Vote weighting", 1)
+	INTEGER (kNeighbours, U"k neighbours", U"1")
+	RADIOx (voteWeighting, U"Vote weighting", 1, 1)
 		RADIOBUTTON (U"Inverse squared distance")
 		RADIOBUTTON (U"Inverse distance")
 		RADIOBUTTON (U"Flat")
@@ -148,32 +140,29 @@ DO
 	FIND_ONE (KNN)
 		if (my nInstances < 1)
 			Melder_throw (U"Instance base is empty.");
-		long k = GET_INTEGER (U"k neighbours");
-		if (k < 1 || k > my nInstances)
+		if (kNeighbours < 1 || kNeighbours > my nInstances)
 			Melder_throw (U"Please select a value of k such that 0 < k < ", my nInstances + 1, U".");
-		int vt = GET_INTEGER (U"Vote weighting");
-		switch (vt) {
+		switch (voteWeighting) {
 			case 1:
-				vt = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 2:
-				vt = kOla_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 3:
-				vt = kOla_FLAT_VOTING;
+				voteWeighting = kOla_FLAT_VOTING;
 				break;
 		}
-		int mode = GET_INTEGER (U"Evaluation method");
-		switch (mode) {
+		switch (evaluationMethod) {
 			case 2:
-				mode = kOla_TEN_FOLD_CROSS_VALIDATION;
+				evaluationMethod = kOla_TEN_FOLD_CROSS_VALIDATION;
 				break;
 			case 1: 
-				mode = kOla_LEAVE_ONE_OUT;
+				evaluationMethod = kOla_LEAVE_ONE_OUT;
 				break;
 		}
 		autoFeatureWeights fws = FeatureWeights_create (my input -> nx);
-		double result = KNN_evaluate (me, fws.get(), k, vt, mode);
+		double result = KNN_evaluate (me, fws.get(), kNeighbours, voteWeighting, evaluationMethod);
 		if (lround (result) == kOla_FWEIGHTS_MISMATCH)
 			Melder_throw (U"The number of feature weights should be equal to the dimensionality of the PatternList.");
 		Melder_information (100 * result, U" percent of the instances correctly classified.");   // BUG: use Melder_percent
@@ -181,11 +170,11 @@ DO
 }
 
 FORM (REAL_KNN_FeatureWeights_evaluate, U"Evaluation", U"KNN & FeatureWeights: Get accuracy estimate...") {
-	RADIO (U"Evaluation method", 1)
+	RADIOx (evaluationMethod, U"Evaluation method", 1, 1)
 		RADIOBUTTON (U"Leave one out")
 		RADIOBUTTON (U"10-fold cross-validation")
-	INTEGER (U"k neighbours", U"1")
-	RADIO (U"Vote weighting", 1)
+	INTEGER (kNeighbours, U"k neighbours", U"1")
+	RADIOx (voteWeighting, U"Vote weighting", 1, 1)
 		RADIOBUTTON (U"Inverse squared distance")
 		RADIOBUTTON (U"Inverse distance")
 		RADIOBUTTON (U"Flat")
@@ -194,31 +183,28 @@ DO
 	FIND_TWO (KNN, FeatureWeights)
 		if (my nInstances < 1)
 			Melder_throw (U"Instance base is empty");
-		long k = GET_INTEGER (U"k neighbours");
-		if (k < 1 || k > my nInstances)
+		if (kNeighbours < 1 || kNeighbours > my nInstances)
 			Melder_throw (U"Please select a value of k such that 0 < k < ", my nInstances + 1, U".");
-		int vt = GET_INTEGER (U"Vote weighting");
-		switch (vt) {
+		switch (voteWeighting) {
 			case 1:
-				vt = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 2:
-				vt = kOla_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 3:
-				vt = kOla_FLAT_VOTING;
+				voteWeighting = kOla_FLAT_VOTING;
 				break;
 		}   
-		int mode = GET_INTEGER (U"Evaluation method");
-		switch (mode) {
+		switch (evaluationMethod) {
 			case 2:
-				mode = kOla_TEN_FOLD_CROSS_VALIDATION;
+				evaluationMethod = kOla_TEN_FOLD_CROSS_VALIDATION;
 				break;
 			case 1:
-				mode = kOla_LEAVE_ONE_OUT;
+				evaluationMethod = kOla_LEAVE_ONE_OUT;
 				break;
 		}
-		double result = KNN_evaluate (me, you, k, vt, mode);
+		double result = KNN_evaluate (me, you, kNeighbours, voteWeighting, evaluationMethod);
 		if (lround (result) == kOla_FWEIGHTS_MISMATCH)
 			Melder_throw (U"The number of feature weights should be equal to the dimensionality of the PatternList.");
 		Melder_information (100 * result, U" percent of the instances correctly classified.");   // BUG: never report a percentage; always report a fraction
@@ -226,66 +212,58 @@ DO
 }
 
 DIRECT (NEW_KNN_extractInputPatterns) {
-	LOOP {
-		iam (KNN);
+	CONVERT_EACH (KNN)
 		if (my nInstances <= 0)
 			Melder_throw (U"Instance base is empty.");
-		autoPatternList input = Data_copy (my input.get());
-		praat_new (input.move(), my name, U"_input");
-	}
-END }
+		autoPatternList result = Data_copy (my input.get());
+	CONVERT_EACH_END (my name, U"_input")
+}
 
 DIRECT (NEW_KNN_extractOutputCategories) {
-	LOOP {
-		iam (KNN);
+	CONVERT_EACH (KNN)
 		if (my nInstances <= 0)
 			Melder_throw (U"Instance base is empty.");
-		autoCategories output = Data_copy (my output.get());
-		praat_new (output.move(), my name, U"_output");
-	}
-END }
+		autoCategories result = Data_copy (my output.get());
+	CONVERT_EACH_END (my name, U"_output");
+}
 
 FORM (MODIFY_KNN_reset, U"Reset", U"KNN: Reset...") {
     LABEL (U"", U"Warning: this command destroys all previous learning.")
     OK
 DO
-	LOOP {
-		iam (KNN);
+	MODIFY_EACH (KNN)
 		my input.reset();
 		my output.reset();
 		my nInstances = 0;
-		praat_dataChanged (me);   // BUG: this should be inserted much more often
-	}
-END }
+	MODIFY_EACH_END
+}
 
 DIRECT (MODIFY_KNN_shuffle) {
-	LOOP {
-		iam (KNN);
+	MODIFY_EACH (KNN)
 		if (my nInstances <= 0)
 			Melder_throw (U"Instance base is empty.");
 		KNN_shuffleInstances (me);
 		praat_dataChanged (me);
-	}
-END }
+	MODIFY_EACH_END
+}
 
 FORM (INFO_MODIFY_KNN_prune, U"Pruning", U"KNN: Prune...") {
-	POSITIVE (U"Noise pruning degree", U"1")
-	POSITIVE (U"Redundancy pruning degree", U"1")
-	INTEGER (U"k neighbours", U"1")
+	POSITIVE (noisePruningDegree, U"Noise pruning degree", U"1")
+	POSITIVE (redundancyPruningDegree, U"Redundancy pruning degree", U"1")
+	INTEGER (kNeighbours, U"k neighbours", U"1")
 	OK
 DO
 	FIND_ONE (KNN)
 		if (my nInstances <= 0)
 			Melder_throw (U"Instance base is empty.");
 		long oldn = my nInstances;   // save before it changes!
-		long k = GET_INTEGER (U"k neighbours");
-		if (k < 1 || k > my nInstances)
+		if (kNeighbours < 1 || kNeighbours > my nInstances)
 			Melder_throw (U"Please select a value of k such that 0 < k < ", my nInstances + 1, U".");
-		double n = GET_REAL (U"Noise pruning degree");
-		double r = GET_REAL (U"Redundancy pruning degree");
-		if (n <= 0 || n > 1 || r <= 0 || r > 1)
-			Melder_throw (U"Please select a pruning degree d such that 0 < d <= 1.");
-		long npruned = KNN_prune_prune (me, n, r, k);
+		if (noisePruningDegree <= 0.0 || noisePruningDegree > 1.0)
+			Melder_throw (U"The noise pruning degree should be between 0.0 (excluded) and 1.0 (included).");
+		if (redundancyPruningDegree <= 0.0 || redundancyPruningDegree > 1.0)
+			Melder_throw (U"The redundancy pruning degree should be between 0.0 (excluded) and 1.0 (included).");
+		long npruned = KNN_prune_prune (me, noisePruningDegree, redundancyPruningDegree, kNeighbours);   // BUG: the KNN is changed
 		Melder_information (npruned, U" instances discarded. \n", U"Size of new instance base: ", oldn - npruned);
 	END
 }
@@ -295,16 +273,15 @@ DO
 /////////////////////////////////////////////////////////////////////////////////////////
 
 FORM (MODIFY_KNN_PatternList_Categories_learn, U"Learning", U"kNN classifiers 1. What is a kNN classifier?") {
-	RADIO (U"Learning method", 1)
+	RADIOx (learningMethod, U"Learning method", 1, 1)
 		RADIOBUTTON (U"Append new information")
 		RADIOBUTTON (U"Replace current instance base")
-	RADIO (U"Ordering", 1)
+	RADIOx (ordering, U"Ordering", 1, 1)
 		RADIOBUTTON (U"Random")
 		RADIOBUTTON (U"Sequential")
 	OK
 DO
 	FIND_THREE (KNN, PatternList, Categories)
-		int ordering = GET_INTEGER (U"Ordering");
 		switch (ordering) {
 			case 1:
 				ordering = kOla_SHUFFLE;
@@ -312,9 +289,8 @@ DO
 			case 2:
 				ordering = kOla_SEQUENTIAL;
 		}
-		int method = GET_INTEGER (U"Learning method");
 		int result = kOla_ERROR;
-		switch (method) {
+		switch (learningMethod) {
 			case 1:
 				result = KNN_learn (me, you, him, my nInstances == 0 ? kOla_REPLACE : kOla_APPEND, ordering);
 				break;
@@ -336,8 +312,8 @@ DO
 /////////////////////////////////////////////////////////////////////////////////////////
 
 FORM (BUG_KNN_evaluateWithTestSet, U"Evaluation", U"KNN & PatternList & Categories: Evaluate...") {
-	INTEGER (U"k neighbours", U"1")
-	RADIO (U"Vote weighting", 1)
+	INTEGER (kNeighbours, U"k neighbours", U"1")
+	RADIOx (voteWeighting, U"Vote weighting", 1, 1)
 		RADIOBUTTON (U"Inverse squared distance")
 		RADIOBUTTON (U"Inverse distance")
 		RADIOBUTTON (U"Flat")
@@ -346,19 +322,17 @@ DO
 	FIND_THREE (KNN, PatternList, Categories)
 		if (my nInstances <= 0)
 			Melder_throw (U"Instance base is empty");
-		long k = GET_INTEGER (U"k neighbours");
-		if (k < 1 || k > my nInstances)
+		if (kNeighbours < 1 || kNeighbours > my nInstances)
 			Melder_throw (U"Please select a value of k such that 0 < k < ", my nInstances + 1, U".");
-		int vt = GET_INTEGER (U"Vote weighting");
-		switch (vt) {
+		switch (voteWeighting) {
 			case 1:
-				vt = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 2:
-				vt = kOla_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 3:
-				vt = kOla_FLAT_VOTING;
+				voteWeighting = kOla_FLAT_VOTING;
 				break;
 		}
 		if (your ny != his size)
@@ -366,14 +340,14 @@ DO
 		if (your nx != my input -> nx)
 			Melder_throw (U"The dimensionality of PatternList should be equal to that of the instance base.");
 		autoFeatureWeights fws = FeatureWeights_create (your nx);
-		double result = KNN_evaluateWithTestSet (me, you, him, fws.get(), k, vt);
+		double result = KNN_evaluateWithTestSet (me, you, him, fws.get(), kNeighbours, voteWeighting);
 		Melder_information (100 * result, U" percent of the instances correctly classified.");
 	END
 }
 
 FORM (BUG_KNN_evaluateWithTestSetAndFeatureWeights, U"Evaluation", U"KNN & PatternList & Categories & FeatureWeights: Evaluate...") {
-	INTEGER4 (kNeighbours, U"k neighbours", U"1")
-	RADIO4 (voteWeighting, U"Vote weighting", 1)
+	INTEGER (kNeighbours, U"k neighbours", U"1")
+	RADIO (voteWeighting, U"Vote weighting", 1)
 		RADIOBUTTON (U"Inverse squared distance")
 		RADIOBUTTON (U"Inverse distance")
 		RADIOBUTTON (U"Flat")
@@ -411,139 +385,127 @@ DO
 /////////////////////////////////////////////////////////////////////////////////////////
 
 FORM (NEW1_KNN_PatternList_to_Categories, U"Classification", U"KNN & PatternList: To Categories...") {
-	INTEGER (U"k neighbours", U"1")
-	RADIO (U"Vote weighting", 1)
+	INTEGER (kNeighbours, U"k neighbours", U"1")
+	RADIOx (voteWeighting, U"Vote weighting", 1, 1)
 		RADIOBUTTON (U"Inverse squared distance")
 		RADIOBUTTON (U"Inverse distance")
 		RADIOBUTTON (U"Flat")
 	OK
 DO
-	FIND_TWO (KNN, PatternList)
+	CONVERT_TWO (KNN, PatternList)
 		if (my nInstances <= 0)
 			Melder_throw (U"Instance base is empty.");
-		long k = GET_INTEGER (U"k neighbours");
-		if (k < 1 || k > my nInstances)
+		if (kNeighbours < 1 || kNeighbours > my nInstances)
 			Melder_throw (U"Please select a value of k such that 0 < k < ", my nInstances + 1, U".");
-		int vt = GET_INTEGER (U"Vote weighting");
-		switch (vt) {
+		switch (voteWeighting) {
 			case 1:
-				vt = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 2:
-				vt = kOla_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 3:
-				vt = kOla_FLAT_VOTING;
+				voteWeighting = kOla_FLAT_VOTING;
 				break;
 		}
 		if (your nx != my input -> nx)
 			Melder_throw (U"The dimensionality of PatternList should match that of the instance base.");
 		autoFeatureWeights fws = FeatureWeights_create (your nx);
-		autoCategories result = KNN_classifyToCategories (me, you, fws.get(), k, vt);
-		praat_new (result.move(), my name, U"_", your name);
-	END
+		autoCategories result = KNN_classifyToCategories (me, you, fws.get(), kNeighbours, voteWeighting);
+	CONVERT_TWO_END (my name, U"_", your name)
 }
 
 FORM (NEW1_KNN_PatternList_to_TableOfReal, U"Classification", U"KNN & PatternList: To TabelOfReal...") {
-	INTEGER (U"k neighbours", U"1")
-	RADIO (U"Vote weighting", 1)
+	INTEGER (kNeighbours, U"k neighbours", U"1")
+	RADIOx (voteWeighting, U"Vote weighting", 1, 1)
 		RADIOBUTTON (U"Inverse squared distance")
 		RADIOBUTTON (U"Inverse distance")
 		RADIOBUTTON (U"Flat")
 	OK
 DO
-	FIND_TWO (KNN, PatternList)
+	CONVERT_TWO (KNN, PatternList)
 		if (my nInstances <= 0)
 			Melder_throw (U"Instance base is empty.");
-		long k = GET_INTEGER (U"k neighbours");
-		if (k < 1 || k > my nInstances)
+		if (kNeighbours < 1 || kNeighbours > my nInstances)
 			Melder_throw (U"Please select a value of k such that 0 < k < ", my nInstances + 1, U".");
 		autoFeatureWeights fws = FeatureWeights_create (your nx);
-		int vt = GET_INTEGER (U"Vote weighting");
-		switch (vt) {
+		switch (voteWeighting) {
 			case 1:
-				vt = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 2:
-				vt = kOla_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 3:
-				vt = kOla_FLAT_VOTING;
+				voteWeighting = kOla_FLAT_VOTING;
 				break;
 		}
 		if (your nx != my input -> nx)
 			Melder_throw (U"The dimensionality of PatternList should match that of the instance base.");
-		autoTableOfReal result = KNN_classifyToTableOfReal (me, you, fws.get(), k, vt);
-		praat_new (result.move(), U"Output");
-	END
+		autoTableOfReal result = KNN_classifyToTableOfReal (me, you, fws.get(), kNeighbours, voteWeighting);
+	CONVERT_TWO_END (U"Output")
 }
 
 FORM (NEW1_KNN_PatternList_FeatureWeights_to_Categories, U"Classification", U"KNN & PatternList & FeatureWeights: To Categories...") {
-	INTEGER (U"k neighbours", U"KNN & PatternList & FeatureWeights: To Categories...")
-	RADIO (U"Vote weighting", 1)
+	INTEGER (kNeighbours, U"k neighbours", U"KNN & PatternList & FeatureWeights: To Categories...")
+	RADIOx (voteWeighting, U"Vote weighting", 1, 1)
 		RADIOBUTTON (U"Inverse squared distance")
 		RADIOBUTTON (U"Inverse distance")
 		RADIOBUTTON (U"Flat")
 	OK
 DO
-	FIND_THREE (KNN, PatternList, FeatureWeights)
+	CONVERT_THREE (KNN, PatternList, FeatureWeights)
 		if (my nInstances <= 0)
 			Melder_throw (U"Instance base is empty.");
-		int vt = GET_INTEGER (U"Vote weighting");
-		switch (vt) {
+		switch (voteWeighting) {
 			case 1:
-				vt = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 2:
-				vt = kOla_DISTANCE_WEIGHTED_VOTING;  
+				voteWeighting = kOla_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 3:
-				vt = kOla_FLAT_VOTING;
+				voteWeighting = kOla_FLAT_VOTING;
 				break;
 		}
-		long k = GET_INTEGER (U"k neighbours");
-		if (k < 1 || k > my nInstances)
+		if (kNeighbours < 1 || kNeighbours > my nInstances)
 			Melder_throw (U"Please select a value of k such that 0 < k < ", my nInstances + 1, U".");
 		if (your nx != my input -> nx)
 			Melder_throw (U"The dimensionality of PatternList should be equal to that of the instance base.");
 		if (your nx != his fweights -> numberOfColumns)
 			Melder_throw (U"The number of feature weights should be equal to the dimensionality of the PatternList.");
-		autoCategories result = KNN_classifyToCategories (me, you, him, k, vt);
-		praat_new (result.move(), U"Output");
-	END
+		autoCategories result = KNN_classifyToCategories (me, you, him, kNeighbours, voteWeighting);
+	CONVERT_THREE_END (U"Output")
 }
 
 FORM (NEW1_KNN_PatternList_FeatureWeights_to_TableOfReal, U"Classification", U"KNN & PatternList & FeatureWeights: To TableOfReal...") {
-	INTEGER (U"k neighbours", U"1")
-	RADIO (U"Vote weighting", 1)
+	INTEGER (kNeighbours, U"k neighbours", U"1")
+	RADIOx (voteWeighting, U"Vote weighting", 1, 1)
 		RADIOBUTTON (U"Inverse squared distance")
 		RADIOBUTTON (U"Inverse distance")
-	RADIOBUTTON (U"Flat")
+		RADIOBUTTON (U"Flat")
 	OK
 DO
-	FIND_THREE (KNN, PatternList, FeatureWeights)
+	CONVERT_THREE (KNN, PatternList, FeatureWeights)
 		if (my nInstances <= 0)
 			Melder_throw (U"Instance base is empty.");
-		long k = GET_INTEGER (U"k neighbours");
-		int vt = GET_INTEGER (U"Vote weighting");
-		if (k < 1 || k > my nInstances)
+		if (kNeighbours < 1 || kNeighbours > my nInstances)
 			Melder_throw (U"Please select a value of k such that 0 < k < ", my nInstances + 1, U"\n");
 		if (your nx != his fweights -> numberOfColumns)
 			Melder_throw (U"The number of features and the number of feature weights should be equal.");
-		switch (vt) {
+		switch (voteWeighting) {
 			case 1:
-				vt = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 2:
-				vt = kOla_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 3:
-				vt = kOla_FLAT_VOTING;
+				voteWeighting = kOla_FLAT_VOTING;
 				break;
 		}
-		autoTableOfReal result = KNN_classifyToTableOfReal (me, you, him, k, vt);
-		praat_new (result.move(), U"Output");
-	END
+		autoTableOfReal result = KNN_classifyToTableOfReal (me, you, him, kNeighbours, voteWeighting);
+	CONVERT_THREE_END (U"Output")
 }
 
 /////////////////////////////////////////////////////////////////////////////////////////
@@ -551,55 +513,44 @@ DO
 /////////////////////////////////////////////////////////////////////////////////////////
 
 FORM (NEW_PatternList_to_Categories_cluster, U"k-means clustering", U"PatternList: To Categories...") {
-	INTEGER (U"k clusters", U"1")
-	POSITIVE (U"Cluster size ratio constraint", U"1e-7");
-	INTEGER (U"Maximum number of reseeds", U"1000")
+	INTEGER (kClusters, U"k clusters", U"1")
+	POSITIVE (clusterSizeRatioConstraint, U"Cluster size ratio constraint", U"1e-7");
+	INTEGER (maximumNumberOfReseeds, U"Maximum number of reseeds", U"1000")
 	OK
 DO
-	LOOP {
-		iam (PatternList);
-		if (my nx > 0 && my ny > 0) {
-			long k = GET_INTEGER (U"k clusters");
-			if (k < 1 || k > my ny)
-				Melder_throw (U"Please select a value of k such that 0 < k <= ", my ny, U".");
-			long rs =  GET_INTEGER (U"Maximum number of reseeds");
-			if (rs < 0)
-				Melder_throw (U"The maximum number of reseeds should not be negative.");
-			double rc =  GET_REAL (U"Cluster size ratio constraint");
-			if (rc > 1 || rc <= 0)
-				Melder_throw (U"Please select a value of the cluster size ratio constraint c such that 0 < c <= 1.");
-			autoFeatureWeights fws = FeatureWeights_create (my nx);
-			autoCategories result = PatternList_to_Categories_cluster (me, fws.get(), k, rc, rs);
-			praat_new (result.move(), U"Output");
-		} else {
+	CONVERT_EACH (PatternList)
+		if (my nx <= 0 || my ny <= 0)
 			Melder_throw (U"PatternList is empty.");
-		}
-	}
-END }
+		if (kClusters < 1 || kClusters > my ny)
+			Melder_throw (U"Please select a value of k such that 0 < k <= ", my ny, U".");
+		if (maximumNumberOfReseeds < 0)
+			Melder_throw (U"The maximum number of reseeds should not be negative.");
+		REQUIRE (clusterSizeRatioConstraint > 0.0 && clusterSizeRatioConstraint <= 1.0,
+			U"The cluster size ratio constraint should be between 0.0 (exclusive) and 1.0 (inclusive).")
+		autoFeatureWeights fws = FeatureWeights_create (my nx);
+		autoCategories result = PatternList_to_Categories_cluster (me, fws.get(), kClusters, clusterSizeRatioConstraint, maximumNumberOfReseeds);
+	CONVERT_EACH_END (U"Output")
+}
 
 FORM (NEW1_PatternList_FeatureWeights_to_Categories_cluster, U"k-means clustering", U"PatternList & FeatureWeights: To Categories...") {
-	INTEGER (U"k clusters", U"1")
-	POSITIVE (U"Cluster size ratio constraint", U"1e-7");
-	INTEGER (U"Maximum number of reseeds", U"1000")
+	INTEGER (kClusters, U"k clusters", U"1")
+	POSITIVE (clusterSizeRatioConstraint, U"Cluster size ratio constraint", U"1e-7");
+	INTEGER (maximumNumberOfReseeds, U"Maximum number of reseeds", U"1000")
 	OK
 DO
-	FIND_TWO (PatternList, FeatureWeights)
+	CONVERT_TWO (PatternList, FeatureWeights)
 		if (my nx <= 0 || my ny <= 0)
 			Melder_throw (U"PatternList is empty.");
 		if (my nx != your fweights -> numberOfColumns)
 			Melder_throw (U"The number of features and the number of feature weights should be equal.");
-		long k = GET_INTEGER (U"k clusters");
-		if (k < 1 || k > my ny)
+		if (kClusters < 1 || kClusters > my ny)
 			Melder_throw (U"Please select a value of k such that 0 < k <= ", my ny, U".");
-		long rs =  GET_INTEGER (U"Maximum number of reseeds");
-		if (rs < 0)
-			Melder_throw (U"The maximum number of reseeds should not be negative.");
-		double rc =  GET_REAL (U"Cluster size ratio constraint");
-		if (rc > 1 || rc <= 0)
-			Melder_throw (U"Please select a value of the cluster size ratio constraint c such that 0 < c <= 1.");
-		autoCategories result = PatternList_to_Categories_cluster (me, you, k, rc, rs);
-		praat_new (result.move(), U"Output");
-	END
+		REQUIRE (maximumNumberOfReseeds >= 0,
+			U"The maximum number of reseeds should be 0 or positive.")
+		REQUIRE (clusterSizeRatioConstraint > 0.0 && clusterSizeRatioConstraint <= 1.0,
+			U"The cluster size ratio constraint should be between 0.0 (exclusive) and 1.0 (inclusive).")
+		autoCategories result = PatternList_to_Categories_cluster (me, you, kClusters, clusterSizeRatioConstraint, maximumNumberOfReseeds);
+	CONVERT_TWO_END (U"Output")
 }
 
 /////////////////////////////////////////////////////////////////////////////////////////
@@ -607,21 +558,18 @@ DO
 /////////////////////////////////////////////////////////////////////////////////////////
 
 DIRECT (NEW_PatternList_to_Dissimilarity) {
-	LOOP {
-		iam (PatternList);
+	CONVERT_EACH (PatternList)
 		autoFeatureWeights fws = FeatureWeights_create (my nx);
 		autoDissimilarity result = KNN_patternToDissimilarity (me, fws.get());
-		praat_new (result.move(), my name);
-	}
-END }
+	CONVERT_EACH_END (my name)
+}
 
 DIRECT (NEW1_PatternList_FeatureWeights_to_Dissimilarity) {
-	FIND_TWO (PatternList, FeatureWeights)
+	CONVERT_TWO (PatternList, FeatureWeights)
 		if (my nx != your fweights -> numberOfColumns)
 			Melder_throw (U"The number of features and the number of feature weights should be equal.");
 		autoDissimilarity result = KNN_patternToDissimilarity (me, you);
-		praat_new (result.move(), U"Output");
-	END
+	CONVERT_TWO_END (U"Output")
 }
 
 /////////////////////////////////////////////////////////////////////////////////////////
@@ -629,150 +577,134 @@ DIRECT (NEW1_PatternList_FeatureWeights_to_Dissimilarity) {
 /////////////////////////////////////////////////////////////////////////////////////////
 
 FORM (NEW_KNN_to_Permutation_annealing, U"KNN: To Permutation", U"PatternList & Categories: To FeatureWeights...") {
-	NATURAL (U"Tries per step", U"200")
-	NATURAL (U"Iterations", U"10")
-	POSITIVE (U"Step size", U"10")
-	POSITIVE (U"Boltzmann constant", U"1.0")
-	POSITIVE (U"Initial temperature", U"0.002")
-	POSITIVE (U"Damping factor", U"1.005")
-	POSITIVE (U"Final temperature", U"0.000002")
+	NATURAL (numberOfTriesPerStep, U"Number of tries per step", U"200")
+	NATURAL (numberOfIterations, U"Number of iterations", U"10")
+	POSITIVE (stepSize, U"Step size", U"10")
+	POSITIVE (boltzmannConstant, U"Boltzmann constant", U"1.0")
+	POSITIVE (initialTemperature, U"Initial temperature", U"0.002")
+	POSITIVE (dampingFactor, U"Damping factor", U"1.005")
+	POSITIVE (finalTemperature, U"Final temperature", U"0.000002")
 	OK
 DO
-	LOOP {
-		iam (KNN);
-		long tries = GET_INTEGER (U"Tries per step");
-		long iterations = GET_INTEGER (U"Iterations");
-		double step_size = GET_REAL (U"Step size");
-		double bolzmann_c = GET_REAL (U"Boltzmann constant");
-		double temp_start = GET_REAL (U"Initial temperature");
-		double temp_damp = GET_REAL (U"Damping factor");
-		double temp_stop = GET_REAL (U"Final temperature");
-		autoPermutation result = KNN_SA_ToPermutation (me, tries, iterations, step_size, bolzmann_c, temp_start, temp_damp, temp_stop);
-		praat_new (result.move(), my name);
-	}
-END }
+	CONVERT_EACH (KNN)
+		autoPermutation result = KNN_SA_ToPermutation (me, numberOfTriesPerStep, numberOfIterations,
+			stepSize, boltzmannConstant, initialTemperature, dampingFactor, finalTemperature);
+	CONVERT_EACH_END (my name)
+}
 
 /////////////////////////////////////////////////////////////////////////////////////////
 // Computation of feature weights                                                      //
 /////////////////////////////////////////////////////////////////////////////////////////
 
 FORM (NEW1_PatternList_Categories_to_FeatureWeights_relief, U"Feature weights", U"PatternList & Categories: To FeatureWeights...") {
-	INTEGER (U"Number of neighbours", U"1")
+	INTEGER (numberOfNeighbours, U"Number of neighbours", U"1")
 	OK
 DO
-	FIND_TWO (PatternList, Categories)
+	CONVERT_TWO (PatternList, Categories)
 		if (my ny < 2)
 			Melder_throw (U"The PatternList object should contain at least two rows.");
 		if (my ny != your size)
 			Melder_throw (U"The number of rows in the PatternList object should equal the number of categories in the Categories object.");
-		autoFeatureWeights result = FeatureWeights_compute (me, you, GET_INTEGER (U"Number of neighbours"));
-		praat_new (result.move(), U"Output");
-	END
+		autoFeatureWeights result = FeatureWeights_compute (me, you, numberOfNeighbours);
+	CONVERT_TWO_END (U"Output")
 }
 
 FORM (NEW1_KNN_PatternList_Categories_to_FeatureWeights_wrapperExt, U"Feature weights", U"KNN & PatternList & Categories: To FeatureWeights..") {
-	POSITIVE (U"Learning rate", U"0.02")
-	NATURAL (U"Number of seeds", U"20")
-	POSITIVE (U"Stop at", U"1")
-	RADIO (U"Optimization", 1)
+	POSITIVE (learningRate, U"Learning rate", U"0.02")
+	NATURAL (numberOfSeeds, U"Number of seeds", U"20")
+	POSITIVE (stopAt, U"Stop at", U"1.0")
+	RADIOx (optimization, U"Optimization", 1, 1)
 		RADIOBUTTON (U"Co-optimization")
 		RADIOBUTTON (U"Single feature")
-	NATURAL (U"k neighbours", U"1")
-	RADIO (U"Vote weighting", 3)
+	NATURAL (kNeighbours, U"k neighbours", U"1")
+	RADIOx (voteWeighting, U"Vote weighting", 3, 1)
 		RADIOBUTTON (U"Inversed squared distance")
 		RADIOBUTTON (U"Inversed distance")
 		RADIOBUTTON (U"Flat")
 	OK
 DO
-	FIND_THREE (KNN, PatternList, Categories)
+	CONVERT_THREE (KNN, PatternList, Categories)
 		if (my nInstances <= 0)
 			Melder_throw (U"Instance base is empty");
-		int mode = GET_INTEGER (U"Vote weighting");
-		switch (mode) {
+		switch (voteWeighting) {
 			case 1:
-				mode = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 2:
-				mode = kOla_DISTANCE_WEIGHTED_VOTING;
+				voteWeighting = kOla_DISTANCE_WEIGHTED_VOTING;
 				break;
 			case 3:
-				mode = kOla_FLAT_VOTING;
+				voteWeighting = kOla_FLAT_VOTING;
 				break;
 		}
-		long k = GET_INTEGER (U"k neighbours");
-		if (k < 1 || k > my nInstances)
+		if (kNeighbours < 1 || kNeighbours > my nInstances)
 			Melder_throw (U"Please select a value of k such that 0 < k < ", my nInstances + 1, U".");
 		if (your nx != my input -> nx)
 			Melder_throw (U"The dimensionality of PatternList should be equal to that of the instance base.");
-		autoFeatureWeights result = FeatureWeights_computeWrapperExt (me, you, him, k, mode, GET_INTEGER (U"Number of seeds"),
-			GET_REAL (U"Learning rate"), GET_REAL (U"Stop at"), (int) GET_INTEGER (U"Optimization"));
-		praat_new (result.move(), U"Output");
-	END
+		autoFeatureWeights result = FeatureWeights_computeWrapperExt (me, you, him, kNeighbours, voteWeighting, numberOfSeeds,
+			learningRate, stopAt, optimization);
+	CONVERT_THREE_END (U"Output")
 }
 
 FORM (NEW_KNN_to_FeatureWeights_wrapperInt, U"Feature weights", U"KNN: To FeatureWeights...") {
-	POSITIVE (U"Learning rate", U"0.02")
-	NATURAL (U"Number of seeds", U"10")
-	POSITIVE (U"Stop at", U"1")
-	RADIO (U"Optimization", 1)
+	POSITIVE (learningRate, U"Learning rate", U"0.02")
+	NATURAL (numberOfSeeds, U"Number of seeds", U"10")
+	POSITIVE (stopAt, U"Stop at", U"1.0")
+	RADIOx (optimization, U"Optimization", 1, 1)
 		RADIOBUTTON (U"Co-optimization")
 		RADIOBUTTON (U"Single feature")
-	RADIO (U"Evaluation method", 1)
+	RADIOx (evaluationMethod, U"Evaluation method", 1, 1)
 		RADIOBUTTON (U"Leave one out")
 		RADIOBUTTON (U"10-fold cross-validation")
-	NATURAL (U"k neighbours", U"1")
-	RADIO (U"Vote weighting", 3)
+	NATURAL (kNeighbours, U"k neighbours", U"1")
+	RADIOx (voteWeighting, U"Vote weighting", 3, 1)
 		RADIOBUTTON (U"Inversed squared distance")
 		RADIOBUTTON (U"Inversed distance")
 		RADIOBUTTON (U"Flat")
 	OK
 DO
-	int emode = GET_INTEGER (U"Evaluation method");
-	switch (emode) {
+	switch (evaluationMethod) {
 		case 1:
-			emode = kOla_LEAVE_ONE_OUT;
+			evaluationMethod = kOla_LEAVE_ONE_OUT;
 			break;
 		case 2:
-			emode = kOla_TEN_FOLD_CROSS_VALIDATION;
+			evaluationMethod = kOla_TEN_FOLD_CROSS_VALIDATION;
 			break;
 	}
-	int mode = GET_INTEGER (U"Vote weighting");
-	switch (mode) {
+	switch (voteWeighting) {
 		case 1:
-			mode = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
+			voteWeighting = kOla_SQUARED_DISTANCE_WEIGHTED_VOTING;
 			break;
 		case 2:
-			mode = kOla_DISTANCE_WEIGHTED_VOTING;
+			voteWeighting = kOla_DISTANCE_WEIGHTED_VOTING;
 			break;
 		case 3:
-			mode = kOla_FLAT_VOTING;
+			voteWeighting = kOla_FLAT_VOTING;
 			break;
 	}
-	long k = GET_INTEGER (U"k neighbours");
-	LOOP {
-		iam (KNN);
+	CONVERT_EACH (KNN)
 		if (my nInstances < 1)
 			Melder_throw (U"Instance base is empty");
-		if (k < 1 || k > my nInstances)
+		if (kNeighbours < 1 || kNeighbours > my nInstances)
 			Melder_throw (U"Please select a value of k such that 0 < k < ", my nInstances + 1, U".");
-		autoFeatureWeights result = FeatureWeights_computeWrapperInt (me, k, mode, GET_INTEGER (U"Number of seeds"), GET_REAL (U"Learning rate"),
-			GET_REAL (U"Stop at"), (int) GET_INTEGER (U"Optimization"), emode);
-		praat_new (result.move(), my name, U"_output");
-	}
-END }
+		autoFeatureWeights result = FeatureWeights_computeWrapperInt (me, kNeighbours, voteWeighting, numberOfSeeds, learningRate,
+			stopAt, optimization, evaluationMethod);
+	CONVERT_EACH_END (my name, U"_output")
+}
 
 /////////////////////////////////////////////////////////////////////////////////////////
 // Creation and processing of auxiliary datatypes                                      //
 /////////////////////////////////////////////////////////////////////////////////////////
 
 FORM (NEW1_FeatureWeights_create, U"Create FeatureWeights", nullptr) {
-	WORD (U"Name", U"empty")
-	NATURAL (U"Number of weights", U"1")
+	WORD (name, U"Name", U"empty")
+	NATURAL (numberOfWeights, U"Number of weights", U"1")
 	OK
 DO
-	autoFeatureWeights result = FeatureWeights_create (GET_INTEGER (U"Number of weights"));
-	praat_new (result.move(), GET_STRING (U"Name"));
-END }
+	CREATE_ONE
+		autoFeatureWeights result = FeatureWeights_create (numberOfWeights);
+	CREATE_ONE_END (name)
+}
 
 /////////////////////////////////////////////////////////////////////////////////////////
 // DEBUG                                                                               //
@@ -815,40 +747,56 @@ END }
 /////////////////////////////////////////////////////////////////////////////////////////
 
 DIRECT (HELP_KNN_help) {
-	Melder_help (U"KNN classifiers");
-END }
+	HELP (U"KNN classifiers")
+}
 
 DIRECT (HINT_KNN_and_FeatureWeights_evaluate) {
-	Melder_information (U"The accuracy of a KNN can be estimated by selecting a KNN and a FeatureWeights object and choosing \"Evaluate...\".");
-END }
+	INFO_NONE
+		Melder_information (U"The accuracy of a KNN can be estimated by selecting a KNN and a FeatureWeights object and choosing \"Evaluate...\".");
+	INFO_NONE_END
+}
 
 DIRECT (HINT_KNN_and_Pattern_classify) {
-	Melder_information (U"You can use the KNN as a classifier by selecting a KNN and a PatternList and choosing \"To Categories...\" or \"To TableOfReal...\".");
-END }
+	INFO_NONE
+		Melder_information (U"You can use the KNN as a classifier by selecting a KNN and a PatternList and choosing \"To Categories...\" or \"To TableOfReal...\".");
+	INFO_NONE_END
+}
 
 DIRECT (HINT_KNN_and_Pattern_and_FeatureWeights_classify) {
-	Melder_information (U"You can use the KNN as a classifier by selecting a KNN, a PatternList and an FeatureWeights object and choosing \"To Categories...\" or \"To TableOfReal...\".");
-END }
+	INFO_NONE
+		Melder_information (U"You can use the KNN as a classifier by selecting a KNN, a PatternList and an FeatureWeights object and choosing \"To Categories...\" or \"To TableOfReal...\".");
+	INFO_NONE_END
+}
 
 DIRECT (HINT_KNN_and_Pattern_and_Categories_learn) {
-	Melder_information (U"You can train a KNN by selecting a KNN, a PatternList and a Categories object together and choosing \"Learn...\".");
-END }
+	INFO_NONE
+		Melder_information (U"You can train a KNN by selecting a KNN, a PatternList and a Categories object together and choosing \"Learn...\".");
+	INFO_NONE_END
+}
 
 DIRECT (HINT_KNN_and_Pattern_and_Categories_evaluate) {
-	Melder_information (U"The accuracy of a KNN can be estimated by selecting a KNN, a test PatternList and the corresponding Categories object and choosing \"Evaluate...\".");
-END }
+	INFO_NONE
+		Melder_information (U"The accuracy of a KNN can be estimated by selecting a KNN, a test PatternList and the corresponding Categories object and choosing \"Evaluate...\".");
+	INFO_NONE_END
+}
 
 DIRECT (HINT_KNN_and_Pattern_and_Categories_and_FeatureWeights_evaluate) {
-	Melder_information (U"The accuracy of a KNN can be estimated by selecting a KNN, a test PatternList, an FeatureWeights object, and the corresponding Categories object and choosing \"Evaluate...\".");
-END }
+	INFO_NONE
+		Melder_information (U"The accuracy of a KNN can be estimated by selecting a KNN, a test PatternList, an FeatureWeights object, and the corresponding Categories object and choosing \"Evaluate...\".");
+	INFO_NONE_END
+}
 
 DIRECT (HINT_Pattern_and_FeatureWeights_to_Categories) {
-	Melder_information (U"A PatternList object and a FeatureWeights object can be used to compute a fixed number of clusters using the k-means clustering clustering algorithm.");
-END }
+	INFO_NONE
+		Melder_information (U"A PatternList object and a FeatureWeights object can be used to compute a fixed number of clusters using the k-means clustering clustering algorithm.");
+	INFO_NONE_END
+}
 
 DIRECT (HINT_Pattern_and_FeatureWeights_to_Dissimilarity) {
-	Melder_information (U"A Dissimilarity matrix can be generated from a PatternList and a FeatureWeights object.");
-END }
+	INFO_NONE
+		Melder_information (U"A Dissimilarity matrix can be generated from a PatternList and a FeatureWeights object.");
+	INFO_NONE_END
+}
 
 /////////////////////////////////////////////////////////////////////////////////////////
 // Setting callbacks                                                                   //
diff --git a/dwtools/Matrix_extensions.cpp b/dwtools/Matrix_extensions.cpp
index 575e9ba..c042c01 100644
--- a/dwtools/Matrix_extensions.cpp
+++ b/dwtools/Matrix_extensions.cpp
@@ -387,7 +387,7 @@ double Matrix_getStandardDeviation (Matrix me, double xmin, double xmax, double
 	return sqrt (sum / (nx * ny - 1));
 }
 
-autoDaata IDXFormattedMatrixFileRecognizer (int numberOfBytesRead, const char *header, MelderFile file) {
+autoDaata IDXFormattedMatrixFileRecognizer (integer numberOfBytesRead, const char *header, MelderFile file) {
 	unsigned int numberOfDimensions, type, pos = 4;
 	/* 
 	 * 9: minumum size is 4 bytes (magic number) + 4 bytes for 1 dimension + 1 value of 1 byte
diff --git a/dwtools/Matrix_extensions.h b/dwtools/Matrix_extensions.h
index 991bc95..de474aa 100644
--- a/dwtools/Matrix_extensions.h
+++ b/dwtools/Matrix_extensions.h
@@ -27,7 +27,7 @@
 #include "Graphics.h"
 
 autoMatrix Matrix_readFromIDXFormatFile (MelderFile file);
-autoDaata IDXFormattedMatrixFileRecognizer (int numberOfBytesRead, const char *header, MelderFile file);
+autoDaata IDXFormattedMatrixFileRecognizer (integer numberOfBytesRead, const char *header, MelderFile file);
 
 void Matrix_scatterPlot (Matrix me, Graphics g, long icx, long icy,
     double xmin, double xmax, double ymin, double ymax,
diff --git a/dwtools/Polynomial.cpp b/dwtools/Polynomial.cpp
index da702b3..4b18cbf 100644
--- a/dwtools/Polynomial.cpp
+++ b/dwtools/Polynomial.cpp
@@ -723,7 +723,7 @@ double Polynomial_evaluate (Polynomial me, double x) {
 }
 
 dcomplex Polynomial_evaluate_z (Polynomial me, dcomplex z) {
-	my v_evaluate_z (z);
+	return my v_evaluate_z (z);
 }
 
 static void Polynomial_evaluate_z_cart (Polynomial me, double r, double phi, double *re, double *im) {
diff --git a/dwtools/TableOfReal_extensions.cpp b/dwtools/TableOfReal_extensions.cpp
index 5ef12a9..bb88e5d 100644
--- a/dwtools/TableOfReal_extensions.cpp
+++ b/dwtools/TableOfReal_extensions.cpp
@@ -1343,15 +1343,15 @@ static void NUMmedianizeColumns (double **a, long rb, long re, long cb, long ce)
 	}
 }
 
-static void NUMstatsColumns (double **a, long rb, long re, long cb, long ce, int stats) {
-	if (stats == 0) {
-		NUMaverageColumns (a, rb, re, cb, ce);
-	} else {
+static void NUMstatsColumns (double **a, long rb, long re, long cb, long ce, bool useMedians) {
+	if (useMedians) {
 		NUMmedianizeColumns (a, rb, re, cb, ce);
+	} else {
+		NUMaverageColumns (a, rb, re, cb, ce);
 	}
 }
 
-autoTableOfReal TableOfReal_meansByRowLabels (TableOfReal me, int expand, int stats) {
+autoTableOfReal TableOfReal_meansByRowLabels (TableOfReal me, bool expand, bool useMedians) {
 	try {
 		autoTableOfReal thee;
 		autoNUMvector<long> index (TableOfReal_getSortedIndexFromRowLabels (me), 1);
@@ -1362,26 +1362,27 @@ autoTableOfReal TableOfReal_meansByRowLabels (TableOfReal me, int expand, int st
 		for (long i = 2; i <= my numberOfRows; i++) {
 			const char32 *li = sorted -> rowLabels[i];
 			if (Melder_cmp (li, label) != 0) {
-				NUMstatsColumns (sorted -> data, indexi, i - 1, 1, my numberOfColumns, stats);
+				NUMstatsColumns (sorted -> data, indexi, i - 1, 1, my numberOfColumns, useMedians);
 
-				if (expand == 0) {
-					indexr++;
+				if (! expand) {
+					indexr ++;
 					TableOfReal_copyOneRowWithLabel (sorted.get(), sorted.get(), indexi, indexr);
 				}
 				label = li; indexi = i;
 			}
 		}
 
-		NUMstatsColumns (sorted -> data, indexi, my numberOfRows, 1, my numberOfColumns, stats);
+		NUMstatsColumns (sorted -> data, indexi, my numberOfRows, 1, my numberOfColumns, useMedians);
 
-		if (expand != 0) {
+		if (expand) {
 			// Now invert the table.
 
-			char32 **tmp = sorted -> rowLabels; sorted -> rowLabels = my rowLabels;
+			char32 **tmp = sorted -> rowLabels;
+			sorted -> rowLabels = my rowLabels;
 			thee = TableOfReal_sortRowsByIndex (sorted.get(), index.peek(), 1);
 			sorted -> rowLabels = tmp;
 		} else {
-			indexr++;
+			indexr ++;
 			TableOfReal_copyOneRowWithLabel (sorted.get(), sorted.get(), indexi, indexr);
 			thee = TableOfReal_create (indexr, my numberOfColumns);
 			for (long i = 1; i <= indexr; i++) {
diff --git a/dwtools/TableOfReal_extensions.h b/dwtools/TableOfReal_extensions.h
index a6ad45b..4482485 100644
--- a/dwtools/TableOfReal_extensions.h
+++ b/dwtools/TableOfReal_extensions.h
@@ -167,7 +167,7 @@ void TableOfReal_standardizeRows (TableOfReal me);
 
 autoTableOfReal TableOfReal_rankColumns (TableOfReal me);
 
-autoTableOfReal TableOfReal_meansByRowLabels (TableOfReal me, int expand, int stats);
+autoTableOfReal TableOfReal_meansByRowLabels (TableOfReal me, bool expand, bool useMedians);
 /*
 	stats == 0? averages : medians
 	For a table with n rows and m different labels (m <= n):
diff --git a/dwtools/TextGrid_extensions.cpp b/dwtools/TextGrid_extensions.cpp
index 72cdf16..c213964 100644
--- a/dwtools/TextGrid_extensions.cpp
+++ b/dwtools/TextGrid_extensions.cpp
@@ -145,7 +145,7 @@ static int isTimitWord (const char label[]) {
 	return 1;
 }
 
-autoDaata TextGrid_TIMITLabelFileRecognizer (int nread, const char *header, MelderFile file) {
+autoDaata TextGrid_TIMITLabelFileRecognizer (integer nread, const char *header, MelderFile file) {
 	char hkruis[3] = "h#", label1[512], label2[512];
 	int length, phnFile = 0;
 	long it[5]; 
diff --git a/dwtools/TextGrid_extensions.h b/dwtools/TextGrid_extensions.h
index e0c26af..5ecbed8 100644
--- a/dwtools/TextGrid_extensions.h
+++ b/dwtools/TextGrid_extensions.h
@@ -2,7 +2,7 @@
 #define _TextGrid_extensions_h_
 /* TextGrid_extensions.h
  *
- * Copyright (C) 1993-2012, 2015 David Weenink
+ * Copyright (C) 1993-2012,2015,2017 David Weenink
  *
  * This code is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -40,7 +40,7 @@ autoTextGrid TextGrid_readFromTIMITLabelFile (MelderFile file, int phnFile);
 	frequency of 16000 Hz is assumed.
 */
 
-autoDaata TextGrid_TIMITLabelFileRecognizer (int nread, const char *header, MelderFile file);
+autoDaata TextGrid_TIMITLabelFileRecognizer (integer nread, const char *header, MelderFile file);
 /*
 	There are two types of TIMIT label files. One with phonetic labels, these
 	files have '.phn' as file extension. The other contains word labels and has
diff --git a/dwtools/praat_BSS_init.cpp b/dwtools/praat_BSS_init.cpp
index 1c9c377..21a1afc 100644
--- a/dwtools/praat_BSS_init.cpp
+++ b/dwtools/praat_BSS_init.cpp
@@ -33,8 +33,8 @@ void praat_TableOfReal_init3 (ClassInfo klas);
 
 FORM (NEW_EEG_to_CrossCorrelationTable, U"EEG: To CrossCorrelationTable", U"EEG: To CrossCorrelationTable...") {
 	praat_TimeFunction_RANGE (fromTime,toTime)
-	REALVAR (lagTime, U"Lag step (s)", U"0.05")
-	TEXTVAR (channelRanges, U"Channel ranges", U"1:64")
+	REAL (lagTime, U"Lag step (s)", U"0.05")
+	TEXTFIELD (channelRanges, U"Channel ranges", U"1:64")
 	LABEL (U"", U"To supply rising or falling ranges, use e.g. 2:6 or 5:3.")
 	OK
 DO
@@ -45,7 +45,7 @@ DO
 
 FORM (NEW_EEG_to_Covariance, U"EEG: To Covariance", U"EEG: To Covariance...") {
 	praat_TimeFunction_RANGE (fromTime,toTime)
-	TEXTVAR (channelRanges, U"Channel ranges", U"1:64")
+	TEXTFIELD (channelRanges, U"Channel ranges", U"1:64")
 	LABEL (U"", U"To supply rising or falling ranges, use e.g. 2:6 or 5:3.")
 	OK
 DO
@@ -56,10 +56,10 @@ DO
 
 FORM (NEW_EEG_to_CrossCorrelationTableList, U"EEG: To CrossCorrelationTableList", U"EEG: To CrossCorrelationTableList...") {
 	praat_TimeFunction_RANGE (fromTime,toTime)
-	POSITIVEVAR (lagTime, U"Lag step (s)", U"0.02")
-	NATURALVAR (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
+	POSITIVE (lagTime, U"Lag step (s)", U"0.02")
+	NATURAL (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
 	LABEL (U"", U"To supply rising or falling ranges, use e.g. 2:6 or 5:3.")
-	TEXTVAR (channelRanges, U"Channel ranges", U"1:64")
+	TEXTFIELD (channelRanges, U"Channel ranges", U"1:64")
 	OK
 DO
 	CONVERT_EACH (EEG)
@@ -70,19 +70,19 @@ DO
 
 FORM (NEW_EEG_to_EEG_bss, U"EEG: To EEG (bss)", U"EEG: To EEG (bss)...") {
 	praat_TimeFunction_RANGE (fromTime,toTime)
-	NATURALVAR (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
-	POSITIVEVAR (lagTime, U"Lag step (s)", U"0.002")
+	NATURAL (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
+	POSITIVE (lagTime, U"Lag step (s)", U"0.002")
 	LABEL (U"", U"To supply rising or falling ranges, use e.g. 2:6 or 5:3.")
-	TEXTVAR (channels, U"Channel ranges", U"1:64")
+	TEXTFIELD (channels, U"Channel ranges", U"1:64")
 	LABEL (U"", U"Pre-whitening parameters")
-	OPTIONMENUVAR (whiteningMethod, U"Whitening method", 1)
+	OPTIONMENU (whiteningMethod, U"Whitening method", 1)
 		OPTION (U"No whitening")
 		OPTION (U"Covariance")
 		OPTION (U"Correlation")
 	LABEL (U"", U"Iteration parameters")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
-	POSITIVEVAR (tolerance, U"Tolerance", U"0.001")
-	OPTIONMENUVAR (diagonalizationMethod, U"Diagonalization method", 2)
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
+	POSITIVE (tolerance, U"Tolerance", U"0.001")
+	OPTIONMENU (diagonalizationMethod, U"Diagonalization method", 2)
 		OPTION (U"qdiag")
 		OPTION (U"ffdiag")
 	OK
@@ -95,9 +95,9 @@ DO
 
 FORM (NEW_EEG_to_PCA, U"EEG: To PCA", U"EEG: To PCA...") {
 	praat_TimeFunction_RANGE (fromTime,toTime)
-	TEXTVAR (channelRanges, U"Channel ranges", U"1:64")
+	TEXTFIELD (channelRanges, U"Channel ranges", U"1:64")
 	LABEL (U"", U"To supply rising or falling ranges, use e.g. 2:6 or 5:3.")
-	OPTIONMENUVAR (method, U"Method", 1)
+	OPTIONMENU (method, U"Method", 1)
 		OPTION (U"Covariance")
 		OPTION (U"Correlation")
 	OK
@@ -108,7 +108,7 @@ DO
 }
 
 FORM (NEW1_EEG_and_PCA_to_EEG_principalComponents, U"EEG & PCA: To EEG (principal components)", U"EEG & PCA: To EEG (principal components)...") {
-	INTEGERVAR (numberOfComponents, U"Number of components", U"0 (= all)")
+	INTEGER (numberOfComponents, U"Number of components", U"0 (= all)")
 	OK
 DO
 	CONVERT_TWO (EEG, PCA)
@@ -117,7 +117,7 @@ DO
 }
 
 FORM (NEW1_EEG_and_PCA_to_EEG_whiten, U"EEG & PCA: To EEG (whiten)", U"EEG & PCA: To EEG (whiten)...") {
-	INTEGERVAR (numberOfComponents, U"Number of components", U"0 (= all)")
+	INTEGER (numberOfComponents, U"Number of components", U"0 (= all)")
 	OK
 DO
 	CONVERT_TWO (EEG, PCA)
@@ -126,9 +126,9 @@ DO
 }
 
 FORM (NEW_EEG_to_Sound_modulated, U"EEG: To Sound (modulated)", nullptr) {
-	POSITIVEVAR (baseFrequency, U"Base frequency (Hz)", U"100.0")
-	POSITIVEVAR (channelBandwidth, U"Channel bandwidth (Hz)", U"100.0")
-	TEXTVAR (channelRanges, U"Channel ranges", U"1:64")
+	POSITIVE (baseFrequency, U"Base frequency (Hz)", U"100.0")
+	POSITIVE (channelBandwidth, U"Channel bandwidth (Hz)", U"100.0")
+	TEXTFIELD (channelRanges, U"Channel ranges", U"1:64")
 	LABEL (U"", U"To supply rising or falling ranges, use e.g. 2:6 or 5:3.")
 	OK
 DO
@@ -138,10 +138,10 @@ DO
 }
 
 FORM (NEW_EEG_to_Sound_frequencyShifted, U"EEG: To Sound (frequency shifted)", 0) {
-	NATURALVAR (channel, U"Channel", U"1")
-	POSITIVEVAR (frequencyShift, U"Frequency shift (Hz)", U"100.0")
-	POSITIVEVAR (samplingFrequency, U"Sampling frequecy (Hz)", U"11025.0")
-	REALVAR (maximumAmplitude, U"Maximum amplitude", U"0.99")
+	NATURAL (channel, U"Channel", U"1")
+	POSITIVE (frequencyShift, U"Frequency shift (Hz)", U"100.0")
+	POSITIVE (samplingFrequency, U"Sampling frequecy (Hz)", U"11025.0")
+	REAL (maximumAmplitude, U"Maximum amplitude", U"0.99")
 	OK
 DO
 	CONVERT_EACH (EEG)
@@ -152,11 +152,11 @@ DO
 /********************** CrossCorrelationTable(s) ******************/
 
 FORM (NEW1_CrossCorrelationTableList_createTestSet, U"CrossCorrelationTableList: Create test set", U"CrossCorrelationTableList: Create test set...") {
-	WORDVAR (name, U"Name", U"5x5")
-	NATURALVAR (matrixDimension, U"Matrix dimension", U"5")
-	NATURALVAR (numberOfMatrices, U"Number of matrices", U"20")
-	BOOLEANVAR (firstIsPositiveDefinite, U"First is positive definite", true)
-	REALVAR (sigma, U"Sigma", U"0.02")
+	WORD (name, U"Name", U"5x5")
+	NATURAL (matrixDimension, U"Matrix dimension", U"5")
+	NATURAL (numberOfMatrices, U"Number of matrices", U"20")
+	BOOLEAN (firstIsPositiveDefinite, U"First is positive definite", true)
+	REAL (sigma, U"Sigma", U"0.02")
 	OK
 DO
 	CREATE_ONE
@@ -165,10 +165,10 @@ DO
 }
 
 FORM (NEW1_CrossCorrelationTable_createSimple, U"Create simple CrossCorrelationTable", nullptr) {
-	WORDVAR (name, U"Name", U"ct")
-	SENTENCEVAR (crosscorrelations_string, U"Cross correlations", U"1.0 0.0 1.0")
-	SENTENCEVAR (centroid_string, U"Centroid", U"0.0 0.0")
-	NATURALVAR (numberOfSamples, U"Number of samples", U"100")
+	WORD (name, U"Name", U"ct")
+	SENTENCE (crosscorrelations_string, U"Cross correlations", U"1.0 0.0 1.0")
+	SENTENCE (centroid_string, U"Centroid", U"0.0 0.0")
+	NATURAL (numberOfSamples, U"Number of samples", U"100")
 	OK
 DO
 	CREATE_ONE
@@ -181,10 +181,10 @@ DIRECT (HELP_MixingMatrix_help) {
 }
 
 FORM (NEW1_MixingMatrix_createSimple, U"Create simple MixingMatrix", U"Create simple MixingMatrix...") {
-	WORDVAR (name, U"Name", U"mm")
-	NATURALVAR (numberOfInputs, U"Number of inputs", U"2")
-	NATURALVAR (numberOfOutputs, U"Number of outputs", U"2")
-	SENTENCEVAR (mixingCoefficients_string, U"Mixing coefficients", U"1.0 0.0 0.0 1.0")
+	WORD (name, U"Name", U"mm")
+	NATURAL (numberOfInputs, U"Number of inputs", U"2")
+	NATURAL (numberOfOutputs, U"Number of outputs", U"2")
+	SENTENCE (mixingCoefficients_string, U"Mixing coefficients", U"1.0 0.0 0.0 1.0")
 	OK
 DO
 	CREATE_ONE
@@ -197,7 +197,7 @@ DIRECT (HELP_CrossCorrelationTable_help) {
 }
 
 FORM (NEW1_Sound_and_PCA_principalComponents, U"Sound & PCA: To Sound (principal components)", nullptr) {
-	NATURALVAR (numberOfComponents, U"Number of components", U"10")
+	NATURAL (numberOfComponents, U"Number of components", U"10")
 	OK
 DO
 	CONVERT_TWO (Sound, PCA)
@@ -206,7 +206,7 @@ DO
 }
 
 FORM (NEW1_Sound_and_PCA_whitenChannels, U"Sound & PCA: To Sound (white channels)", nullptr) {
-	NATURALVAR (numberOfComponents, U"Number of components", U"10")
+	NATURAL (numberOfComponents, U"Number of components", U"10")
 	OK
 DO
 	CONVERT_TWO (Sound, PCA)
@@ -231,7 +231,7 @@ DO
 
 FORM (NEW_Sound_to_CrossCorrelationTable, U"Sound: To CrossCorrelationTable", U"Sound: To CrossCorrelationTable...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (lagStep, U"Lag step (s)", U"0.0")
+	REAL (lagStep, U"Lag step (s)", U"0.0")
     OK
 DO
     CONVERT_EACH (Sound)
@@ -241,7 +241,7 @@ DO
 
 FORM (NEW1_Sounds_to_CrossCorrelationTable_combined, U"Sound: To CrossCorrelationTable (combined)", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (lagStep, U"Lag step (s)", U"0.0")
+	REAL (lagStep, U"Lag step (s)", U"0.0")
 	OK
 DO
 	CONVERT_COUPLE (Sound)
@@ -254,8 +254,8 @@ DIRECT (HELP_CrossCorrelationTableList_help) {
 }
 
 FORM (REAL_CrossCorrelationTableList_getDiagonalityMeasure, U"CrossCorrelationTableList: Get diagonality measure", U"CrossCorrelationTableList: Get diagonality measure...") {
-	NATURALVAR (fromTable, U"First table", U"1")
-	NATURALVAR (toTable, U"Last table", U"100")
+	NATURAL (fromTable, U"First table", U"1")
+	NATURAL (toTable, U"Last table", U"100")
 	OK
 DO
 	NUMBER_ONE (CrossCorrelationTableList)
@@ -264,7 +264,7 @@ DO
 }
 
 FORM (NEW_CrossCorrelationTableList_extractCrossCorrelationTable, U"CrossCorrelationTableList: Extract one CrossCorrelationTable", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	CONVERT_EACH (CrossCorrelationTableList)
@@ -276,9 +276,9 @@ DO
 }
 
 FORM (NEW_CrossCorrelationTableList_to_Diagonalizer, U"CrossCorrelationTableList: To Diagonalizer", nullptr) {
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
-	POSITIVEVAR (tolerance, U"Tolerance", U"0.001")
-	OPTIONMENUVAR (diagonalizationMethod, U"Diagonalization method", 2)
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
+	POSITIVE (tolerance, U"Tolerance", U"0.001")
+	OPTIONMENU (diagonalizationMethod, U"Diagonalization method", 2)
 		OPTION (U"qdiag")
 		OPTION (U"ffdiag")
 	OK
@@ -289,9 +289,9 @@ DO
 }
 
 FORM (MODIFY_Diagonalizer_and_CrossCorrelationTableList_improveDiagonality, U"Diagonalizer & CrossCorrelationTableList: Improve diagonality", nullptr) {
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
-	POSITIVEVAR (tolerance, U"Tolerance", U"0.001")
-	OPTIONMENUVAR (diagonalizationMethod, U"Diagonalization method", 2)
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
+	POSITIVE (tolerance, U"Tolerance", U"0.001")
+	OPTIONMENU (diagonalizationMethod, U"Diagonalization method", 2)
 		OPTION (U"qdiag")
 		OPTION (U"ffdiag")
 	OK
@@ -302,8 +302,8 @@ DO
 }
 
 FORM (REAL_CrossCorrelationTableList_and_Diagonalizer_getDiagonalityMeasure, U"CrossCorrelationTableList & Diagonalizer: Get diagonality measure", nullptr) {
-	NATURALVAR (fromTable, U"First table", U"1")
-	NATURALVAR (toTable, U"Last table", U"100")
+	NATURAL (fromTable, U"First table", U"1")
+	NATURAL (toTable, U"Last table", U"100")
 	OK
 DO
 	NUMBER_TWO (CrossCorrelationTableList, Diagonalizer)
@@ -325,9 +325,9 @@ DIRECT (NEW1_CrossCorrelationTableList_and_Diagonalizer_diagonalize) {
 
 FORM (MODIFY_CrossCorrelationTableList_and_MixingMatrix_improveUnmixing, U"", nullptr) {
 	LABEL (U"", U"Iteration parameters")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
-	POSITIVEVAR (tolerance, U"Tolerance", U"0.001")
-	OPTIONMENUVAR (diagonalizationMethod, U"Diagonalization method", 2)
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
+	POSITIVE (tolerance, U"Tolerance", U"0.001")
+	OPTIONMENU (diagonalizationMethod, U"Diagonalization method", 2)
 		OPTION (U"qdiag")
 		OPTION (U"ffdiag")
 	OK
@@ -348,8 +348,8 @@ DIRECT (NEW_Diagonalizer_to_MixingMatrix) {
 }
 
 FORM (MODIFY_MixingMatrix_multiplyInputChannel, U"MixingMatrix: Multiply input channel", U"MixingMatrix: Multiply input channel...") {
-	NATURAL4 (inputChannel, U"Input channel number", U"1")
-	REAL4  (value, U"Multiply by", U"1.0")
+	NATURAL (inputChannel, U"Input channel number", U"1")
+	REAL  (value, U"Multiply by", U"1.0")
 	OK
 DO
 	MODIFY_EACH (MixingMatrix)
@@ -370,12 +370,12 @@ DIRECT (NEW1_MixingMatrix_to_Diagonalizer) {
 }
 FORM (NEW_Sound_to_MixingMatrix, U"Sound: To MixingMatrix", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	NATURALVAR (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
-	POSITIVEVAR (lagTime, U"Lag step (s)", U"0.002")
+	NATURAL (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
+	POSITIVE (lagTime, U"Lag step (s)", U"0.002")
 	LABEL (U"", U"Iteration parameters")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
-	POSITIVEVAR (tolerance, U"Tolerance", U"0.001")
-	OPTIONMENUVAR (diagonalizationMethod, U"Diagonalization method", 2)
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
+	POSITIVE (tolerance, U"Tolerance", U"0.001")
+	OPTIONMENU (diagonalizationMethod, U"Diagonalization method", 2)
 		OPTION (U"qdiag")
 		OPTION (U"ffdiag")
 	OK
@@ -387,12 +387,12 @@ DO
 
 FORM (MODIFY_Sound_and_MixingMatrix_improveUnmixing, U"", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	NATURALVAR (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
-	POSITIVEVAR (lagTime, U"Lag step (s)", U"0.002")
+	NATURAL (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
+	POSITIVE (lagTime, U"Lag step (s)", U"0.002")
 	LABEL (U"", U"Iteration parameters")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
-	POSITIVEVAR (tolerance, U"Tolerance", U"0.001")
-	OPTIONMENUVAR (diagonalizationMethod, U"Diagonalization method", 2)
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
+	POSITIVE (tolerance, U"Tolerance", U"0.001")
+	OPTIONMENU (diagonalizationMethod, U"Diagonalization method", 2)
 		OPTION (U"qdiag")
 		OPTION (U"ffdiag")
 	OK
@@ -404,8 +404,8 @@ DO
 
 FORM (NEW_Sound_to_CrossCorrelationTableList, U"Sound: To CrossCorrelationTableList", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	NATURALVAR (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
-	POSITIVEVAR (lagTime, U"Lag step (s)", U"0.002")
+	NATURAL (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
+	POSITIVE (lagTime, U"Lag step (s)", U"0.002")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -415,12 +415,12 @@ DO
 
 FORM (NEW_Sound_to_Sound_bss, U"Sound: To Sound (blind source separation)", U"Sound: To Sound (blind source separation)...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	NATURALVAR (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
-	POSITIVEVAR (lagStep, U"Lag step (s)", U"0.002")
+	NATURAL (numberOfCrossCorrelations, U"Number of cross-correlations", U"40")
+	POSITIVE (lagStep, U"Lag step (s)", U"0.002")
 	LABEL (U"", U"Iteration parameters")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
-	POSITIVEVAR (tolerance, U"Tolerance", U"0.001")
-	OPTIONMENUVAR (diagonalizationMethod, U"Diagonalization method", 2)
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
+	POSITIVE (tolerance, U"Tolerance", U"0.001")
+	OPTIONMENU (diagonalizationMethod, U"Diagonalization method", 2)
 		OPTION (U"qdiag")
 		OPTION (U"ffdiag")
 	OK
@@ -431,7 +431,7 @@ DO
 }
 
 FORM (NEW_Sound_to_Sound_whiteChannels, U"Sound: To Sound (white channels)", U"Sound: To Sound (white channels)...") {
-	POSITIVEVAR (varianceFraction, U"Variance fraction to keep", U"0.99")
+	POSITIVE (varianceFraction, U"Variance fraction to keep", U"0.99")
     OK
 DO
     if (varianceFraction > 1.0) varianceFraction = 1.0;
@@ -454,8 +454,8 @@ DIRECT (NEW1_Sound_and_MixingMatrix_mix) {
 }
 
 FORM (NEW1_Sound_and_MixingMatrix_mixPart, U"Sound & MixingMatrix: Mix part", U"MixingMatrix") {
-	REALVAR (fromTime, U"left Time_range (s)", U"0.0")
-	REALVAR (toTime, U"right Time_range (s)", U"0.0 (=all)")
+	REAL (fromTime, U"left Time_range (s)", U"0.0")
+	REAL (toTime, U"right Time_range (s)", U"0.0 (=all)")
 	OK
 DO
 	if (toTime < fromTime) {
diff --git a/dwtools/praat_DataModeler_init.cpp b/dwtools/praat_DataModeler_init.cpp
index 758261a..8ff95e5 100644
--- a/dwtools/praat_DataModeler_init.cpp
+++ b/dwtools/praat_DataModeler_init.cpp
@@ -30,13 +30,13 @@
 /* DataModeler */
 
 FORM (NEW1_DataModeler_createSimple, U"Create simple DataModeler", nullptr) {
-	WORDVAR (name, U"Name", U"dm")
-	REALVAR (xmin, U"left X range", U"0.0")
-	REALVAR (xmax, U"right X range", U"1.0")
-	NATURALVAR (numberOfDataPoints, U"Number of data points", U"20")
-	SENTENCEVAR (parameter_string, U"Parameters", U"0.0 1.0 1.0")
-	POSITIVEVAR (standardDeviation, U"Gaussian noise stdev", U"0.2")
-	OPTIONMENUVAR (functionType, U"Basis functions", 2)
+	WORD (name, U"Name", U"dm")
+	REAL (xmin, U"left X range", U"0.0")
+	REAL (xmax, U"right X range", U"1.0")
+	NATURAL (numberOfDataPoints, U"Number of data points", U"20")
+	SENTENCE (parameter_string, U"Parameters", U"0.0 1.0 1.0")
+	POSITIVE (standardDeviation, U"Gaussian noise stdev", U"0.2")
+	OPTIONMENU (functionType, U"Basis functions", 2)
 		OPTION (U"Polynomial")
 		OPTION (U"Legendre")
 		
@@ -48,14 +48,14 @@ DO
 }
 
 FORM (GRAPHICS_DataModeler_speckle, U"DataModeler: Speckle", nullptr) {
-	REALVAR (xmin, U"left X range", U"0.0")
-	REALVAR (xmax, U"right X range", U"0.0")
-	REALVAR (ymin, U"left Y range", U"0.0")
-	REALVAR (ymax, U"right Y range", U"0.0")
-	BOOLEANVAR (errorBars, U"Draw error bars", 1)
-	REALVAR (barWidth_mm, U"Bar width (mm)", U"1.0")
-	REALVAR (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xmin, U"left X range", U"0.0")
+	REAL (xmax, U"right X range", U"0.0")
+	REAL (ymin, U"left Y range", U"0.0")
+	REAL (ymax, U"right Y range", U"0.0")
+	BOOLEAN (errorBars, U"Draw error bars", 1)
+	REAL (barWidth_mm, U"Bar width (mm)", U"1.0")
+	REAL (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	long order = 6;
@@ -66,13 +66,13 @@ DO
 
 
 FORM (GRAPHICS_DataModeler_drawEstimatedTrack, U"DataModeler: Draw estimated track", nullptr) {
-	REALVAR (xmin, U"left X range", U"0.0")
-	REALVAR (xmax, U"right X range", U"0.0")
-	REALVAR (ymin, U"left Y range", U"0.0")
-	REALVAR (ymax, U"right Y range", U"0.0")
-	INTEGERVAR (order, U"Order of polynomials for estimation", U"3")
-	REALVAR (xOffset, U"Horizontal offset (mm)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xmin, U"left X range", U"0.0")
+	REAL (xmax, U"right X range", U"0.0")
+	REAL (ymin, U"left Y range", U"0.0")
+	REAL (ymax, U"right Y range", U"0.0")
+	INTEGER (order, U"Order of polynomials for estimation", U"3")
+	REAL (xOffset, U"Horizontal offset (mm)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	REQUIRE (order >= 0, U"The order must be greater than or equal to zero.")
@@ -94,7 +94,7 @@ DIRECT (INTEGER_DataModeler_getNumberOfFixedParameters) {
 }
 
 FORM (REAL_DataModeler_getParameterValue, U"DataModeler: Get parameter value", nullptr) {
-	NATURALVAR (parameterNumber, U"Parameter number", U"1")
+	NATURAL (parameterNumber, U"Parameter number", U"1")
 	OK
 DO
 	NUMBER_ONE (DataModeler)
@@ -103,7 +103,7 @@ DO
 }
 
 FORM (INFO_DataModeler_getParameterStatus, U"DataModeler: Get parameter status", nullptr) {
-	NATURALVAR (parameterNumber, U"Parameter number", U"1")
+	NATURAL (parameterNumber, U"Parameter number", U"1")
 	OK
 DO
 	STRING_ONE (DataModeler)
@@ -114,7 +114,7 @@ DO
 }
 
 FORM (REAL_DataModeler_getParameterStandardDeviation, U"DataModeler: Get parameter standard deviation", nullptr) {
-	NATURALVAR (parameterNumber, U"Parameter number", U"1")
+	NATURAL (parameterNumber, U"Parameter number", U"1")
 	OK
 DO
 	NUMBER_ONE (DataModeler)
@@ -123,8 +123,8 @@ DO
 }
 
 FORM (REAL_DataModeler_getVarianceOfParameters, U"DataModeler: Get variance of parameters", nullptr) {
-	INTEGERVAR (fromParameter, U"left Parameter range", U"0")
-	INTEGERVAR (toParameter, U"right Parameter range", U"0")
+	INTEGER (fromParameter, U"left Parameter range", U"0")
+	INTEGER (toParameter, U"right Parameter range", U"0")
 	OK
 DO
 	long nofp;
@@ -146,7 +146,7 @@ DIRECT (INTEGER_DataModeler_getNumberOfInvalidDataPoints) {
 }
 
 FORM (REAL_DataModeler_getModelValueAtX, U"DataModeler: Get model value at x", nullptr) {
-	REALVAR (x, U"X", U"0.1")
+	REAL (x, U"X", U"0.1")
 	OK
 DO
 	NUMBER_ONE (DataModeler)
@@ -170,7 +170,7 @@ DIRECT (REAL_DataModeler_getStandardDeviation) {
 }
 
 FORM (REAL_DataModeler_getDataPointXValue, U"DataModeler: Get data point x value", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	NUMBER_ONE (DataModeler)
@@ -179,7 +179,7 @@ DO
 }
 
 FORM (REAL_DataModeler_getDataPointYValue, U"DataModeler: Get data point y value", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	NUMBER_ONE (DataModeler)
@@ -188,7 +188,7 @@ DO
 }
 
 FORM (REAL_DataModeler_getDataPointYSigma, U"DataModeler: Get data point y sigma", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	NUMBER_ONE (DataModeler)
@@ -197,7 +197,7 @@ DO
 }
 
 FORM (INFO_DataModeler_getDataPointStatus, U"DataModeler: Get data point status", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	STRING_ONE (DataModeler)
@@ -214,7 +214,7 @@ DIRECT (REAL_DataModeler_getCoefficientOfDetermination) {
 
 
 FORM (INFO_DataModeler_reportChiSquared, U"DataModeler: Report chi squared", nullptr) {
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Sigma")
 		OPTION (U"Relative")
@@ -236,7 +236,7 @@ DIRECT (REAL_DataModeler_getDegreesOfFreedom) {
 
 
 FORM (MODIFY_DataModeler_setDataWeighing, U"DataModeler: Set data weighing", nullptr) {
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 1)
+	OPTIONMENU (weighDataType, U"Weigh data", 1)
 		OPTION (U"Equally")
 		OPTION (U"Sigma")
 		OPTION (U"Relative")
@@ -249,7 +249,7 @@ DO
 }
 
 FORM (MODIFY_DataModeler_setTolerance, U"DataModeler: Set tolerance", nullptr) {
-	REALVAR (tolerance, U"Tolerance", U"1e-5")
+	REAL (tolerance, U"Tolerance", U"1e-5")
 	OK
 DO
 	MODIFY_EACH (DataModeler)
@@ -258,9 +258,9 @@ DO
 }
 
 FORM (MODIFY_DataModeler_setParameterValue, U"DataModeler: Set parameter value", nullptr) {
-	NATURALVAR (parameterNumber, U"Parameter number", U"1")
-	REALVAR (value, U"Value", U"0.0")
-	OPTIONMENUVAR (parameterStatus, U"Status", 1)
+	NATURAL (parameterNumber, U"Parameter number", U"1")
+	REAL (value, U"Value", U"0.0")
+	OPTIONMENU (parameterStatus, U"Status", 1)
 		OPTION (U"Free")
 		OPTION (U"Fixed")
 	OK
@@ -271,8 +271,8 @@ DO
 }
 
 FORM (MODIFY_DataModeler_setParameterFree, U"DataModeler: Set parameter free", nullptr) {
-	INTEGERVAR (fromParameter, U"left Parameter range", U"0")
-	INTEGERVAR (toParameter, U"right Parameter range", U"0")
+	INTEGER (fromParameter, U"left Parameter range", U"0")
+	INTEGER (toParameter, U"right Parameter range", U"0")
 	OK
 DO
 	MODIFY_EACH (DataModeler)
@@ -281,7 +281,7 @@ DO
 }
 
 FORM (MODIFY_DataModeler_setParameterValuesToZero, U"DataModeler: Set parameter values to zero", nullptr) {
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
+	REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
 	OK
 DO
 	MODIFY_EACH (DataModeler)
@@ -290,8 +290,8 @@ DO
 }
 
 FORM (MODIFY_DataModeler_setDataPointStatus, U"DataModeler: Set data point status", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
-	OPTIONMENUVAR (dataStatus, U"Status", 1)
+	NATURAL (index, U"Index", U"1")
+	OPTIONMENU (dataStatus, U"Status", 1)
 		OPTION (U"Valid")
 		OPTION (U"Invalid")
 	OK
@@ -303,8 +303,8 @@ DO
 }
 
 FORM (MODIFY_DataModeler_setDataPointXValue, U"DataModeler: Set data point x value", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
-	REALVAR (x, U"X", U"0.0")
+	NATURAL (index, U"Index", U"1")
+	REAL (x, U"X", U"0.0")
 	OK
 DO
 	MODIFY_EACH (DataModeler)
@@ -313,8 +313,8 @@ DO
 }
 
 FORM (MODIFY_DataModeler_setDataPointYValue, U"DataModeler: Set data point y value", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
-	REALVAR (y, U"Y", U"0.0")
+	NATURAL (index, U"Index", U"1")
+	REAL (y, U"Y", U"0.0")
 	OK
 DO
 	MODIFY_EACH (DataModeler)
@@ -323,9 +323,9 @@ DO
 }
 
 FORM (MODIFY_DataModeler_setDataPointValues, U"DataModeler: Set data point values", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
-	REALVAR (x, U"X", U"0.0")
-	REALVAR (y, U"Y", U"0.0")
+	NATURAL (index, U"Index", U"1")
+	REAL (x, U"X", U"0.0")
+	REAL (y, U"Y", U"0.0")
 	OK
 DO
 	MODIFY_EACH (DataModeler)
@@ -334,8 +334,8 @@ DO
 }
 
 FORM (MODIFY_DataModeler_setDataPointYSigma, U"DataModeler: Set data point y sigma", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
-	REALVAR (sigma, U"Sigma", U"10.0")
+	NATURAL (index, U"Index", U"1")
+	REAL (sigma, U"Sigma", U"10.0")
 	OK
 DO
 	MODIFY_EACH (DataModeler)
@@ -356,7 +356,7 @@ DIRECT (NEW_DataModeler_to_Covariance_parameters) {
 }
 
 FORM (NEW_DataModeler_to_Table_zscores, U"DataModeler: To Table (z-scores)", nullptr) {
-	BOOLEANVAR (useSigmaY, U"Use sigmas on y-values", 1)
+	BOOLEAN (useSigmaY, U"Use sigmas on y-values", 1)
 	OK
 DO
 	CONVERT_EACH (DataModeler)
@@ -366,11 +366,11 @@ DO
 
 FORM (NEW_Formant_to_FormantModeler, U"Formant: To FormantModeler", nullptr) {
 //double tmin, double tmax, long numberOfFormants, long numberOfParametersPerTrack
-	REALVAR (fromTime, U"left Start time", U"0.0")
-	REALVAR (toTime, U"right End time", U"0.1")
-	NATURALVAR (numberOfFormants, U"Number of formants", U"3")
-	INTEGERVAR (order, U"Order of polynomials", U"3")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	REAL (fromTime, U"left Start time", U"0.0")
+	REAL (toTime, U"right End time", U"0.1")
+	NATURAL (numberOfFormants, U"Number of formants", U"3")
+	INTEGER (order, U"Order of polynomials", U"3")
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
@@ -384,19 +384,19 @@ DO
 }
 
 FORM (NEW1_Formants_extractSmoothestPart, U"Formants: Extract smoothest part", U"Formants: Extract smoothest part") {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"0.0")
-	NATURALVAR (numberOfFormantTracks, U"Number of formant tracks", U"4")
-	INTEGERVAR (order, U"Order of polynomials", U"3")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0")
+	NATURAL (numberOfFormantTracks, U"Number of formant tracks", U"4")
+	INTEGER (order, U"Order of polynomials", U"3")
 	LABEL (U"", U"Use bandwidths to model the formant tracks:")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
 		OPTION (U"Sqrt bandwidth")
 	LABEL (U"", U"Zero parameter values whose range include zero:")
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	REALVAR (power, U"Parameter variance power", U"1.5")
+	REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
+	REAL (power, U"Parameter variance power", U"1.5")
 	OK
 DO
 	OrderedOf<structFormant> formants;
@@ -420,25 +420,25 @@ DO
 END }
 
 FORM (NEW1_Formants_extractSmoothestPart_constrained, U"Formants: Extract smoothest part (constrained)", U"Formants: Extract smoothest part (constrained)...") {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"0.0")
-	NATURALVAR (numberOfFormantTracks, U"Number of formant tracks", U"4")
-	INTEGERVAR (order, U"Order of polynomials", U"3")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0")
+	NATURAL (numberOfFormantTracks, U"Number of formant tracks", U"4")
+	INTEGER (order, U"Order of polynomials", U"3")
 	LABEL (U"", U"Use bandwidths to model the formant tracks:")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
 		OPTION (U"Sqrt bandwidth")
 	LABEL (U"", U"Zero parameter values whose range include zero:")
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	REALVAR (power, U"Parameter variance power", U"1.5")
+	REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
+	REAL (power, U"Parameter variance power", U"1.5")
 	LABEL (U"", U"The constraints on the formants:")
-	REALVAR (minimumF1, U"Minimum F1 (Hz)", U"100.0")
-	REALVAR (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
-	REALVAR (minimumF2, U"Minimum F2 (Hz)", U"0.0")
-	POSITIVEVAR (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
-	POSITIVEVAR (minimumF3, U"Minimum F3 (Hz)", U"1500.0")
+	REAL (minimumF1, U"Minimum F1 (Hz)", U"100.0")
+	REAL (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
+	REAL (minimumF2, U"Minimum F2 (Hz)", U"0.0")
+	POSITIVE (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
+	POSITIVE (minimumF3, U"Minimum F3 (Hz)", U"1500.0")
 	OK
 DO
 	OrderedOf<structFormant> formants;
@@ -464,14 +464,14 @@ END }
 /********************** FormantModeler ******************************/
 
 FORM (GRAPHICS_FormantModeler_drawEstimatedTracks, U"FormantModeler: Draw estimated tracks", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"0.0")
-	REALVAR (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
-	NATURALVAR (fromFormant, U"left Formant range", U"1")
-	NATURALVAR (toFormant, U"right Formant range", U"3")
-	INTEGERVAR (order, U"Order of polynomials for estimation", U"3")
-	REALVAR (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0")
+	REAL (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
+	NATURAL (fromFormant, U"left Formant range", U"1")
+	NATURAL (toFormant, U"right Formant range", U"3")
+	INTEGER (order, U"Order of polynomials for estimation", U"3")
+	REAL (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	REQUIRE (order >= 0, U"The order must be greater than or equal to zero.")
@@ -481,13 +481,13 @@ DO
 }
 
 FORM (GRAPHICS_FormantModeler_drawTracks, U"FormantModeler: Draw tracks", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"0.0")
-	REALVAR (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
-	NATURALVAR (fromFormant, U"left Formant range", U"1")
-	NATURALVAR (toFormant, U"right Formant range", U"3")
-	REALVAR (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0")
+	REAL (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
+	NATURAL (fromFormant, U"left Formant range", U"1")
+	NATURAL (toFormant, U"right Formant range", U"3")
+	REAL (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	long order = 6;
@@ -497,15 +497,15 @@ DO
 }
 
 FORM (GRAPHICS_FormantModeler_speckle, U"FormantModeler: Speckle", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"0.0")
-	REALVAR (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
-	NATURALVAR (fromFormant, U"left Formant range", U"1")
-	NATURALVAR (toFormant, U"right Formant range", U"3")
-	BOOLEANVAR (errorBars, U"Draw error bars", true)
-	REALVAR (barWidth_mm, U"Bar width (mm)", U"1.0")
-	REALVAR (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0")
+	REAL (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
+	NATURAL (fromFormant, U"left Formant range", U"1")
+	NATURAL (toFormant, U"right Formant range", U"3")
+	BOOLEAN (errorBars, U"Draw error bars", true)
+	REAL (barWidth_mm, U"Bar width (mm)", U"1.0")
+	REAL (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	long order = 6;
@@ -515,21 +515,21 @@ DO
 }
 
 FORM (GRAPHICS_FormantModeler_drawOutliersMarked, U"FormantModeler: Draw outliers marked", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"0.0")
-	REALVAR (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
-	NATURALVAR (fromFormant, U"left Formant range", U"1")
-	NATURALVAR (toFormant, U"right Formant range", U"3")
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"3.0")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0")
+	REAL (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
+	NATURAL (fromFormant, U"left Formant range", U"1")
+	NATURAL (toFormant, U"right Formant range", U"3")
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"3.0")
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
 		OPTION (U"Sqrt bandwidth")
-	WORDVAR (mark_string, U"Mark", U"o")
-	NATURALVAR (fontSize, U"Mark font size", U"12")
-	REALVAR (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", false)
+	WORD (mark_string, U"Mark", U"o")
+	NATURAL (fontSize, U"Mark font size", U"12")
+	REAL (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", false)
 	OK
 DO
 	GRAPHICS_EACH (FormantModeler)
@@ -538,17 +538,17 @@ DO
 }
 
 FORM (GRAPHICS_FormantModeler_drawVariancesOfShiftedTracks, U"FormantModeler: Draw variances of shifted tracks", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"0.0")
-	REALVAR (fromVariance, U"left Variance range", U"0.0")
-	REALVAR (toVariance, U"right Variance range", U"0.0")
-	OPTIONMENUVAR (shiftTracks, U"Shift tracks", 1)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0")
+	REAL (fromVariance, U"left Variance range", U"0.0")
+	REAL (toVariance, U"right Variance range", U"0.0")
+	OPTIONMENU (shiftTracks, U"Shift tracks", 1)
 		OPTION (U"No")
 		OPTION (U"Up")
 		OPTION (U"Down")
-	NATURALVAR (fromFormant, U"left Formant range", U"1")
-	NATURALVAR (toFormant, U"right Formant range", U"4")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (fromFormant, U"left Formant range", U"1")
+	NATURAL (toFormant, U"right Formant range", U"4")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FormantModeler)
@@ -557,16 +557,16 @@ DO
 }
 
 FORM (GRAPHICS_FormantModeler_drawCumulativeChiScores, U"FormantModeler: Draw cumulative chi scores", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"0.0")
-	REALVAR (fromChisq, U"left Chisq range", U"0.0")
-	REALVAR (toChisq, U"right Chisq range", U"0.0")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0")
+	REAL (fromChisq, U"left Chisq range", U"0.0")
+	REAL (toChisq, U"right Chisq range", U"0.0")
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
 		OPTION (U"Sqrt bandwidth")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FormantModeler)
@@ -576,17 +576,17 @@ DO
 
 
 FORM (GRAPHICS_FormantModeler_normalProbabilityPlot, U"FormantModeler: Normal probability plot", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	NATURAL (formantNumber, U"Formant number", U"1")
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
 		OPTION (U"Sqrt bandwidth")
-	NATURALVAR (numberOfQuantiles, U"Number of quantiles", U"100")
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"0.0")
-	NATURALVAR (fontSize, U"Label size", U"12")
-	WORDVAR (label, U"Label", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	NATURAL (numberOfQuantiles, U"Number of quantiles", U"100")
+	REAL (numberOfSigmas, U"Number of sigmas", U"0.0")
+	NATURAL (fontSize, U"Label size", U"12")
+	WORD (label, U"Label", U"+")
+	BOOLEAN (garnish, U"Garnish", true);
 	OK
 DO
 	GRAPHICS_EACH (FormantModeler)
@@ -595,16 +595,16 @@ DO
 }
 
 FORM (GRAPHICS_FormantModeler_drawBasisFunction, U"FormantModeler: Draw basis function", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"0.0")
-	REALVAR (ymin, U"left Amplitude range (Hz)", U"0.0")
-	REALVAR (ymax, U"right Amplitude range (Hz)", U"5500.0")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0")
+	REAL (ymin, U"left Amplitude range (Hz)", U"0.0")
+	REAL (ymax, U"right Amplitude range (Hz)", U"5500.0")
 	//long iterm, bool scaled, long numberOfPoints, int garnish
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	NATURALVAR (basisFunctionIndex, U"Basis function", U"2")
-	BOOLEANVAR (scale, U"Scale function with parameter value", false)
-	NATURALVAR (numberOfPoints, U"Number of points", U"200")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (formantNumber, U"Formant number", U"1")
+	NATURAL (basisFunctionIndex, U"Basis function", U"2")
+	BOOLEAN (scale, U"Scale function with parameter value", false)
+	NATURAL (numberOfPoints, U"Number of points", U"200")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FormantModeler)
@@ -613,8 +613,8 @@ DO
 }
 
 FORM (REAL_FormantModeler_getModelValueAtTime, U"", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	REALVAR (time, U"Time (s)", U"0.1")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (time, U"Time (s)", U"0.1")
 	OK
 DO
 	NUMBER_ONE (FormantModeler)
@@ -624,8 +624,8 @@ DO
 
 
 FORM (REAL_FormantModeler_getDataPointValue, U"FormantModeler: Get data point value", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	NUMBER_ONE (FormantModeler)
@@ -634,8 +634,8 @@ DO
 }
 
 FORM (REAL_FormantModeler_getDataPointSigma, U"FormantModeler: Get data point sigma", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	NUMBER_ONE (FormantModeler)
@@ -645,8 +645,8 @@ DO
 
 
 FORM (INFO_FormantModeler_getDataPointStatus, U"FormantModeler: Get data point status", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	INTEGER_ONE (FormantModeler)
@@ -663,7 +663,7 @@ DIRECT (INTEGER_FormantModeler_getNumberOfTracks) {
 
 
 FORM (INTEGER_FormantModeler_getNumberOfParameters, U"FormantModeler: Get number of parameters", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	INTEGER_ONE (FormantModeler)
@@ -673,7 +673,7 @@ DO
 
 
 FORM (INTEGER_FormantModeler_getNumberOfFixedParameters, U"FormantModeler: Get number of fixed parameters", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	INTEGER_ONE (FormantModeler)
@@ -688,7 +688,7 @@ DIRECT (INTEGER_FormantModeler_getNumberOfDataPoints) {
 }
 
 FORM (INTEGER_FormantModeler_getNumberOfInvalidDataPoints, U"FormantModeler: Get number of invalid data points", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	INTEGER_ONE (FormantModeler)
@@ -697,8 +697,8 @@ DO
 }
 
 FORM (REAL_FormantModeler_getParameterValue, U"FormantModeler: Get parameter value", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	NATURALVAR (parameterNumber, U"Parameter number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	NATURAL (parameterNumber, U"Parameter number", U"1")
 	OK
 DO
 	NUMBER_ONE (FormantModeler)
@@ -707,8 +707,8 @@ DO
 }
 
 FORM (INFO_FormantModeler_getParameterStatus, U"FormantModeler: Get parameter status", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	NATURALVAR (parameterNumber, U"Parameter number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	NATURAL (parameterNumber, U"Parameter number", U"1")
 	OK
 DO
 	STRING_ONE (FormantModeler)
@@ -719,8 +719,8 @@ DO
 }
 
 FORM (REAL_FormantModeler_getParameterStandardDeviation, U"FormantModeler: Get parameter standard deviatio", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	NATURALVAR (parameterNumber, U"Parameter number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	NATURAL (parameterNumber, U"Parameter number", U"1")
 	OK
 DO
 	NUMBER_ONE (FormantModeler)
@@ -730,10 +730,10 @@ DO
 
 
 FORM (REAL_FormantModeler_getVarianceOfParameters, U"FormantModeler: Get variance of parameters", nullptr) {
-	INTEGERVAR (fromFormant, U"left Formant range", U"0")
-	INTEGERVAR (toFormant, U"right Formant range", U"0")
-	INTEGERVAR (fromParameter, U"left Parameter range", U"0")
-	INTEGERVAR (toParameter, U"right Parameter range", U"0")
+	INTEGER (fromFormant, U"left Formant range", U"0")
+	INTEGER (toFormant, U"right Formant range", U"0")
+	INTEGER (fromParameter, U"left Parameter range", U"0")
+	INTEGER (toParameter, U"right Parameter range", U"0")
 	OK
 DO
 	long numberOfFreeParameters;
@@ -744,8 +744,8 @@ DO
 
 
 FORM (REAL_FormantModeler_getCoefficientOfDetermination, U"FormantModeler: Get coefficient of determination", nullptr) {
-	INTEGERVAR (fromFormant, U"left Formant range", U"0")
-	INTEGERVAR (toFormant, U"right Formant range", U"0")
+	INTEGER (fromFormant, U"left Formant range", U"0")
+	INTEGER (toFormant, U"right Formant range", U"0")
 	OK
 DO
 	NUMBER_ONE (FormantModeler)
@@ -755,7 +755,7 @@ DO
 
 
 FORM (REAL_FormantModeler_getResidualSumOfSquares, U"FormantModeler: Get residual sum of squares", U"FormantModeler: Get residual sum of squares...") {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	NUMBER_ONE (FormantModeler)
@@ -764,7 +764,7 @@ DO
 }
 
 FORM (REAL_FormantModeler_getStandardDeviation, U"FormantModeler: Get formant standard deviation", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	NUMBER_ONE (FormantModeler)
@@ -773,7 +773,7 @@ DO
 }
 
 FORM (INFO_FormantModeler_reportChiSquared, U"FormantModeler: Report chi squared", nullptr) {
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
@@ -788,7 +788,7 @@ DO
 }
 
 FORM (REAL_FormantModeler_getDegreesOfFreedom, U"FormantModeler: Get degrees of freedom", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	NUMBER_ONE (FormantModeler)
@@ -797,10 +797,10 @@ DO
 }
 
 FORM (REAL_FormantModeler_getSmoothnessValue, U"FormantModeler: Get smoothness value", nullptr) {
-	INTEGERVAR (fromFormant, U"left Formant range", U"0")
-	INTEGERVAR (toFormant, U"right Formant range", U"0")
-	INTEGERVAR (order, U"Order of polynomials", U"3")
-	REALVAR (power, U"Parameter variance power", U"1.5")
+	INTEGER (fromFormant, U"left Formant range", U"0")
+	INTEGER (toFormant, U"right Formant range", U"0")
+	INTEGER (order, U"Order of polynomials", U"3")
+	REAL (power, U"Parameter variance power", U"1.5")
 	OK
 DO
 	NUMBER_ONE (FormantModeler)
@@ -809,9 +809,9 @@ DO
 }
 
 FORM (REAL_FormantModeler_getAverageDistanceBetweenTracks, U"FormantModeler: Get average distance between tracks", nullptr) {
-	NATURALVAR (track1, U"Track 1", U"2")
-	NATURALVAR (track2, U"Track 2", U"3")
-	OPTIONMENUVAR (typeOfData, U"Type of data", 1)
+	NATURAL (track1, U"Track 1", U"2")
+	NATURAL (track2, U"Track 2", U"3")
+	OPTIONMENU (typeOfData, U"Type of data", 1)
 		OPTION (U"Data points")
 		OPTION (U"Modeled")
 	OK
@@ -822,11 +822,11 @@ DO
 }
 
 FORM (REAL_FormantModeler_getFormantsConstraintsFactor, U"FormantModeler: Get formants constraints factor", nullptr) {
-	REALVAR (minimumF1, U"Minimum F1 (Hz)", U"100.0")
-	REALVAR (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
-	REALVAR (minimumF2, U"Minimum F2 (Hz)", U"0.0")
-	POSITIVEVAR (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
-	POSITIVEVAR (minimumF3, U"Minimum F3 (Hz)", U"1500.0")
+	REAL (minimumF1, U"Minimum F1 (Hz)", U"100.0")
+	REAL (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
+	REAL (minimumF2, U"Minimum F2 (Hz)", U"0.0")
+	POSITIVE (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
+	POSITIVE (minimumF3, U"Minimum F3 (Hz)", U"1500.0")
 	OK
 DO
 	NUMBER_ONE (FormantModeler)
@@ -835,9 +835,9 @@ DO
 }
 
 FORM (MODIFY_FormantModeler_setDataWeighing, U"FormantModeler: Set data weighing", nullptr) {
-	INTEGERVAR (fromFormant, U"left Formant range", U"0")
-	INTEGERVAR (toFormant, U"right Formant range", U"0")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	INTEGER (fromFormant, U"left Formant range", U"0")
+	INTEGER (toFormant, U"right Formant range", U"0")
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
@@ -850,7 +850,7 @@ DO
 }
 
 FORM (MODIFY_FormantModeler_setTolerance, U"FormantModeler: Set tolerance", nullptr) {
-	REALVAR (tolerance, U"Tolerance", U"1e-5")
+	REAL (tolerance, U"Tolerance", U"1e-5")
 	OK
 DO
 	MODIFY_EACH (FormantModeler)
@@ -859,9 +859,9 @@ DO
 }
 
 FORM (MODIFY_FormantModeler_setParameterValueFixed, U"FormantModeler: Set parameter value fixed", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	NATURALVAR (parameterNumber, U"Parameter number", U"1")
-	REALVAR (parameterValue, U"Value", U"0.0")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	NATURAL (parameterNumber, U"Parameter number", U"1")
+	REAL (parameterValue, U"Value", U"0.0")
 	OK
 DO
 	MODIFY_EACH (FormantModeler)
@@ -871,10 +871,10 @@ DO
 
 
 FORM (MODIFY_FormantModeler_setParameterFree, U"FormantModeler: Set parameter free", nullptr) {
-	INTEGERVAR (fromFormant, U"left Formant range", U"0")
-	INTEGERVAR (toFormant, U"right Formant range", U"0")
-	INTEGERVAR (fromParameter, U"left Parameter range", U"0")
-	INTEGERVAR (toParameter, U"right Parameter range", U"0")
+	INTEGER (fromFormant, U"left Formant range", U"0")
+	INTEGER (toFormant, U"right Formant range", U"0")
+	INTEGER (fromParameter, U"left Parameter range", U"0")
+	INTEGER (toParameter, U"right Parameter range", U"0")
 	OK
 DO
 	MODIFY_EACH (FormantModeler)
@@ -883,9 +883,9 @@ DO
 }
 
 FORM (MODIFY_FormantModeler_setParameterValuesToZero, U"FormantModeler: Set parameter values to zero", nullptr) {
-	INTEGERVAR (fromFormant, U"left Formant range", U"0")
-	INTEGERVAR (toFormant, U"right Formant range", U"0")
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
+	INTEGER (fromFormant, U"left Formant range", U"0")
+	INTEGER (toFormant, U"right Formant range", U"0")
+	REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
 	OK
 DO
 	MODIFY_EACH (FormantModeler)
@@ -894,9 +894,9 @@ DO
 }
 
 FORM (MODIFY_FormantModeler_setDataPointValue, U"FormantModeler: Set data point value", nullptr) {
-	NATURALVAR (formantNumber, U"Formant index", U"1")
-	NATURALVAR (dataNumber, U"Data index", U"1")
-	REALVAR (value, U"Value", U"1.0")
+	NATURAL (formantNumber, U"Formant index", U"1")
+	NATURAL (dataNumber, U"Data index", U"1")
+	REAL (value, U"Value", U"1.0")
 	OK
 DO
 	MODIFY_EACH (FormantModeler)
@@ -905,9 +905,9 @@ DO
 }
 
 FORM (MODIFY_FormantModeler_setDataPointSigma, U"FormantModeler: Set data point sigma", nullptr) {
-	NATURALVAR (formantNumber, U"Formant index", U"1")
-	NATURALVAR (dataNumber, U"Data index", U"1")
-	REALVAR (sigma, U"Sigma", U"10.0")
+	NATURAL (formantNumber, U"Formant index", U"1")
+	NATURAL (dataNumber, U"Data index", U"1")
+	REAL (sigma, U"Sigma", U"10.0")
 	OK
 DO
 	MODIFY_EACH (FormantModeler)
@@ -916,9 +916,9 @@ DO
 }
 
 FORM (MODIFY_FormantModeler_setDataPointStatus, U"FormantModeler: Set data point status", nullptr) {
-	NATURALVAR (formantNumber, U"Formant index", U"1")
-	NATURALVAR (dataNumber, U"Data index", U"1")
-	OPTIONMENUVAR (dataStatus, U"Status", 1)
+	NATURAL (formantNumber, U"Formant index", U"1")
+	NATURAL (dataNumber, U"Data index", U"1")
+	OPTIONMENU (dataStatus, U"Status", 1)
 		OPTION (U"Valid")
 		OPTION (U"Invalid")
 	OK
@@ -936,7 +936,7 @@ DIRECT (MODIFY_FormantModeler_fitModel) {
 }
 
 FORM (NEW_FormantModeler_to_Covariance_parameters, U"", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	CONVERT_EACH (FormantModeler)
@@ -945,7 +945,7 @@ DO
 }
 
 FORM (NEW_FormantModeler_extractDataModeler, U"FormantModeler: Extract DataModeler", nullptr) {
-	NATURALVAR (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	CONVERT_EACH (FormantModeler)
@@ -954,7 +954,7 @@ DO
 }
 
 FORM (NEW_FormantModeler_to_Table_zscores, U"", nullptr) {
-	BOOLEANVAR (useBandwidth, U"Bandwidths as standard deviation", true)
+	BOOLEAN (useBandwidth, U"Bandwidths as standard deviation", true)
 	OK
 DO
 	CONVERT_EACH (FormantModeler)
@@ -963,8 +963,8 @@ DO
 }
 
 FORM (NEW_FormantModeler_processOutliers, U"", nullptr) {
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"3.0")
-	BOOLEANVAR (useBandwidth, U"Bandwidths as standard deviation", true)
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"3.0")
+	BOOLEAN (useBandwidth, U"Bandwidths as standard deviation", true)
 	OK
 DO
 	CONVERT_EACH (FormantModeler)
@@ -986,9 +986,9 @@ DIRECT (WINDOW_OptimalCeilingTier_edit) {
 /*************************** PitchModeler *************************************/
 
 FORM (NEW_Pitch_to_PitchModeler, U"Pitch: To PitchModeler", nullptr) {
-	REALVAR (fromTime, U"left Start time (s)", U"0.0")
-	REALVAR (toTime, U"right End time (s)", U"0.1")
-	INTEGERVAR (order, U"Order of polynomials", U"2")
+	REAL (fromTime, U"left Start time (s)", U"0.0")
+	REAL (toTime, U"right End time (s)", U"0.1")
+	INTEGER (order, U"Order of polynomials", U"2")
 	OK
 DO
 	CONVERT_EACH (Pitch)
@@ -997,12 +997,12 @@ DO
 }
 
 FORM (GRAPHICS_PitchModeler_draw, U"PitchModeler: Draw", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"0.0")
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (Hz)", U"500.0")
-	INTEGERVAR (order, U"Order of polynomial for estimation", U"2")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0")
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"500.0")
+	INTEGER (order, U"Order of polynomial for estimation", U"2")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (PitchModeler)
@@ -1011,24 +1011,24 @@ DO
 }
 
 FORM (REAL_Sound_getOptimalFormantCeiling, U"Sound: Get optimal formant ceiling", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.1")
-	REALVAR (toTime, U"right Time range (s)", U"0.15")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.0025")
-	POSITIVEVAR (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
-	POSITIVEVAR (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
-	NATURALVAR (numberOfFrequencySteps, U"Number of frequency steps", U"11")
-	POSITIVEVAR (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
-	NATURALVAR (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
-	INTEGERVAR (order, U"Order of polynomials", U"3")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	REAL (fromTime, U"left Time range (s)", U"0.1")
+	REAL (toTime, U"right Time range (s)", U"0.15")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.0025")
+	POSITIVE (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
+	POSITIVE (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
+	NATURAL (numberOfFrequencySteps, U"Number of frequency steps", U"11")
+	POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
+	NATURAL (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
+	INTEGER (order, U"Order of polynomials", U"3")
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
 		OPTION (U"Sqrt bandwidth")
 	LABEL (U"", U"Make parameters that include zero in their confidence region zero")
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	REALVAR (power, U"Parameter variance power", U"1.5")
+	REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
+	REAL (power, U"Parameter variance power", U"1.5")
 	OK
 DO
 	NUMBER_ONE (Sound)
@@ -1037,24 +1037,24 @@ DO
 }
 
 FORM (NEW_Sound_to_Formant_interval, U"Sound: To Formant (interval)", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.1")
-	REALVAR (toTime, U"right Time range (s)", U"0.15")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.0025")
-	POSITIVEVAR (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
-	POSITIVEVAR (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
-	NATURALVAR (numberOfFrequencySteps, U"Number of frequency steps", U"11")
-	POSITIVEVAR (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
-	NATURALVAR (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
-	INTEGERVAR (order, U"Order of polynomials", U"3")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	REAL (fromTime, U"left Time range (s)", U"0.1")
+	REAL (toTime, U"right Time range (s)", U"0.15")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.0025")
+	POSITIVE (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
+	POSITIVE (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
+	NATURAL (numberOfFrequencySteps, U"Number of frequency steps", U"11")
+	POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
+	NATURAL (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
+	INTEGER (order, U"Order of polynomials", U"3")
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
 		OPTION (U"Sqrt bandwidth")
 	LABEL (U"", U"Make parameters that include zero in their confidence region zero")
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	REALVAR (power, U"Parameter variance power", U"1.5")
+	REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
+	REAL (power, U"Parameter variance power", U"1.5")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1064,30 +1064,30 @@ DO
 }
 
 FORM (NEW_Sound_to_Formant_interval_constrained, U"Sound: To Formant (interval, constrained)", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.1")
-	REALVAR (toTime, U"right Time range (s)", U"0.15")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.0025")
-	POSITIVEVAR (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
-	POSITIVEVAR (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
-	NATURALVAR (numberOfFrequencySteps, U"Number of frequency steps", U"11")
-	POSITIVEVAR (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
-	NATURALVAR (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
-	INTEGERVAR (order, U"Order of polynomials", U"3")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	REAL (fromTime, U"left Time range (s)", U"0.1")
+	REAL (toTime, U"right Time range (s)", U"0.15")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.0025")
+	POSITIVE (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
+	POSITIVE (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
+	NATURAL (numberOfFrequencySteps, U"Number of frequency steps", U"11")
+	POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
+	NATURAL (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
+	INTEGER (order, U"Order of polynomials", U"3")
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
 		OPTION (U"Sqrt bandwidth")
 	LABEL (U"", U"Make parameters that include zero in their confidence region zero")
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	REALVAR (power, U"Parameter variance power", U"1.5")
+	REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
+	REAL (power, U"Parameter variance power", U"1.5")
 	LABEL (U"", U"Formant frequency constraints")
-	REALVAR (minimumF1, U"Minimum F1 (Hz)", U"100.0")
-	REALVAR (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
-	REALVAR (minimumF2, U"Minimum F2 (Hz)", U"0.0")
-	POSITIVEVAR (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
-	POSITIVEVAR (minimumF3, U"Minimum F3 (Hz)", U"1000.0")
+	REAL (minimumF1, U"Minimum F1 (Hz)", U"100.0")
+	REAL (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
+	REAL (minimumF2, U"Minimum F2 (Hz)", U"0.0")
+	POSITIVE (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
+	POSITIVE (minimumF3, U"Minimum F3 (Hz)", U"1000.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1097,30 +1097,30 @@ DO
 }
 
 FORM (NEW_Sound_to_Formant_interval_constrained_robust, U"Sound: To Formant (interval, constrained, robust)", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.1")
-	REALVAR (toTime, U"right Time range (s)", U"0.15")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.0025")
-	POSITIVEVAR (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
-	POSITIVEVAR (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
-	NATURALVAR (numberOfFrequencySteps, U"Number of frequency steps", U"11")
-	POSITIVEVAR (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
-	NATURALVAR (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
-	INTEGERVAR (order, U"Order of polynomials", U"3")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	REAL (fromTime, U"left Time range (s)", U"0.1")
+	REAL (toTime, U"right Time range (s)", U"0.15")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.0025")
+	POSITIVE (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
+	POSITIVE (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
+	NATURAL (numberOfFrequencySteps, U"Number of frequency steps", U"11")
+	POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
+	NATURAL (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
+	INTEGER (order, U"Order of polynomials", U"3")
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
 		OPTION (U"Sqrt bandwidth")
 	LABEL (U"", U"Make parameters that include zero in their confidence region zero")
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	REALVAR (power, U"Parameter variance power", U"1.5")
+	REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
+	REAL (power, U"Parameter variance power", U"1.5")
 	LABEL (U"", U"Formant frequency constraints")
-	REALVAR (minimumF1, U"Minimum F1 (Hz)", U"100.0")
-	REALVAR (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
-	REALVAR (minimumF2, U"Minimum F2 (Hz)", U"0.0")
-	POSITIVEVAR (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
-	POSITIVEVAR (minimumF3, U"Minimum F3 (Hz)", U"1000.0")
+	REAL (minimumF1, U"Minimum F1 (Hz)", U"100.0")
+	REAL (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
+	REAL (minimumF2, U"Minimum F2 (Hz)", U"0.0")
+	POSITIVE (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
+	POSITIVE (minimumF3, U"Minimum F3 (Hz)", U"1000.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1130,23 +1130,23 @@ DO
 }
 
 FORM (NEW_Sound_to_OptimalCeilingTier, U"", nullptr) {
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.0025")
-	POSITIVEVAR (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
-	POSITIVEVAR (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
-	NATURALVAR (numberOfFrequencySteps, U"Number of frequency steps", U"11")
-	POSITIVEVAR (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
-	REALVAR (smoothingWindow_s, U"Formant smoothing window (s)", U"0.05")
-	NATURALVAR (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
-	INTEGERVAR (order, U"Order of polynomials", U"2")
-	OPTIONMENUVAR (weighDataType, U"Weigh data", 2)
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.0025")
+	POSITIVE (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
+	POSITIVE (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
+	NATURAL (numberOfFrequencySteps, U"Number of frequency steps", U"11")
+	POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
+	REAL (smoothingWindow_s, U"Formant smoothing window (s)", U"0.05")
+	NATURAL (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
+	INTEGER (order, U"Order of polynomials", U"2")
+	OPTIONMENU (weighDataType, U"Weigh data", 2)
 		OPTION (U"Equally")
 		OPTION (U"Bandwidth")
 		OPTION (U"Bandwidth / frequency")
 		OPTION (U"Sqrt bandwidth")
 	LABEL (U"", U"Make parameters that include zero in their confidence region zero")
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	REALVAR (power, U"Parameter variance power", U"1.5")
+	REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
+	REAL (power, U"Parameter variance power", U"1.5")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1155,14 +1155,14 @@ DO
 }
 
 FORM (NEW_Table_to_DataModeler, U"", nullptr) {
-	REALVAR (xmin, U"left X range", U"0.0")
-	REALVAR (xmax, U"right X range", U"0.0 (= auto)")
-	WORDVAR (columnWithX_string, U"Column with X data", U"")
-	WORDVAR (columnWithY_string, U"Column with Y data", U"")
-	WORDVAR (columnEithSigma_string, U"Column with sigmas", U"")
-	OPTIONMENUVAR (functionType, U"Model functions", 1)
+	REAL (xmin, U"left X range", U"0.0")
+	REAL (xmax, U"right X range", U"0.0 (= auto)")
+	WORD (columnWithX_string, U"Column with X data", U"")
+	WORD (columnWithY_string, U"Column with Y data", U"")
+	WORD (columnEithSigma_string, U"Column with sigmas", U"")
+	OPTIONMENU (functionType, U"Model functions", 1)
 		OPTION (U"Legendre polynomials")
-	INTEGERVAR (maximumOrder, U"Maximum order", U"3")
+	INTEGER (maximumOrder, U"Maximum order", U"3")
 	OK
 DO
 	CONVERT_EACH (Table)
diff --git a/dwtools/praat_David_init.cpp b/dwtools/praat_David_init.cpp
index 298bd3d..a0fc65a 100644
--- a/dwtools/praat_David_init.cpp
+++ b/dwtools/praat_David_init.cpp
@@ -155,9 +155,9 @@ void praat_EditDistanceTable_as_TableOfReal_init (ClassInfo klas);
 
 #define DTW_constraints_addCommonFields(matchStart,matchEnd,slopeConstraint) \
 	LABEL (U"", U"Boundary conditions") \
-	BOOLEANVAR (matchStart, U"Match begin positions", false) \
-	BOOLEANVAR (matchEnd, U"Match end positions", false) \
-	RADIOVAR (slopeConstraint, U"Slope constraint", 1) \
+	BOOLEAN (matchStart, U"Match begin positions", false) \
+	BOOLEAN (matchEnd, U"Match end positions", false) \
+	RADIO (slopeConstraint, U"Slope constraint", 1) \
 		RADIOBUTTON (U"no restriction") \
 		RADIOBUTTON (U"1/3 < slope < 3") \
 		RADIOBUTTON (U"1/2 < slope < 2") \
@@ -179,7 +179,7 @@ void praat_EditDistanceTable_as_TableOfReal_init (ClassInfo klas);
 
 FORM (MODIFY_ActivationList_formula, U"ActivationList: Formula", nullptr) {
 	LABEL (U"label", U"for col := 1 to ncol do { self [row, col] := `formula' ; x := x + dx } y := y + dy }}")
-	TEXTVAR (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH (ActivationList)
@@ -202,11 +202,11 @@ DIRECT (NEW_ActivationList_to_PatternList) {
 /********************** BandFilterSpectrogram *******************************************/
 
 FORM (GRAPHICS_BandFilterSpectrogram_drawFrequencyScale, U"", U"") {
-	REALVAR (fromFrequency, U"left Horizontal frequency range (Hz)", U"0.0")
-	REALVAR (toFrequency, U"right Horizontal frequency range (Hz)", U"0.0")
-	REALVAR (yFromFrequency, U"left Vertical frequency range (mel)", U"0.0")
-	REALVAR (yToFrequency, U"right Vertical frequency range (mel)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Horizontal frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Horizontal frequency range (Hz)", U"0.0")
+	REAL (yFromFrequency, U"left Vertical frequency range (mel)", U"0.0")
+	REAL (yToFrequency, U"right Vertical frequency range (mel)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (BandFilterSpectrogram)
@@ -225,12 +225,12 @@ DIRECT (HELP_BarkSpectrogram_help) {
 }
 
 FORM (GRAPHICS_BarkFilter_drawSpectrum, U"BarkFilter: Draw spectrum (slice)", U"FilterBank: Draw spectrum (slice)...") {
-	REALVAR (time, U"Time (s)", U"0.1")
-	REALVAR (fromFrequency, U"left Frequency range (Bark)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (Bark)", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range (dB)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (time, U"Time (s)", U"0.1")
+	REAL (fromFrequency, U"left Frequency range (Bark)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Bark)", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range (dB)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (BarkFilter)
@@ -239,18 +239,18 @@ DO
 }
 
 FORM (GRAPHICS_BarkFilter_drawSekeyHansonFilterFunctions, U"BarkFilter: Draw filter functions", U"FilterBank: Draw filter functions...") {
-	INTEGERVAR (fromFilter, U"left Filter range", U"0")
-	INTEGERVAR (toFilter, U"right Filter range", U"0")
-	RADIOVAR (frequencyScale, U"Frequency scale", 1)
+	INTEGER (fromFilter, U"left Filter range", U"0")
+	INTEGER (toFilter, U"right Filter range", U"0")
+	RADIO (frequencyScale, U"Frequency scale", 1)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
 		RADIOBUTTON (U"mel")
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	BOOLEANVAR (amplitudeScale_dB, U"Amplitude scale in dB", true)
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	BOOLEAN (amplitudeScale_dB, U"Amplitude scale in dB", true)
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (BarkFilter)
@@ -259,17 +259,17 @@ DO
 }
 
 FORM (GRAPHICS_BarkSpectrogram_drawSekeyHansonAuditoryFilters, U"BarkSpectrogram: Draw Sekey-Hanson auditory filters", U"BarkSpectrogram: Draw Sekey-Hanson auditory filters...") {
-	INTEGERVAR (fromFilter, U"left Filter range", U"0")
-	INTEGERVAR (toFilter, U"right Filter range", U"0")
-	RADIOVAR (frequencyScale, U"Frequency scale", 2)
+	INTEGER (fromFilter, U"left Filter range", U"0")
+	INTEGER (toFilter, U"right Filter range", U"0")
+	RADIO (frequencyScale, U"Frequency scale", 2)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	BOOLEANVAR (amplitudeScale_dB, U"Amplitude scale in dB", 1)
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	BOOLEAN (amplitudeScale_dB, U"Amplitude scale in dB", true)
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (BarkSpectrogram)
@@ -280,11 +280,11 @@ DO
 
 FORM (GRAPHICS_BarkFilter_paint, U"FilterBank: Paint", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range (bark)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (bark)", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", false)
+	REAL (fromFrequency, U"left Frequency range (bark)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (bark)", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", false)
 	OK
 DO
 	GRAPHICS_EACH (BarkFilter)
@@ -313,11 +313,11 @@ DIRECT (NEW_FormantFilter_to_Spectrogram) {
 /********************** Categories  ****************************************/
 
 FORM (MODIFY_Categories_append, U"Categories: Append 1 category", U"Categories: Append 1 category...") {
-	SENTENCE (U"Category", U"")
+	SENTENCE (category, U"Category", U"")
 	OK
 DO
 	MODIFY_EACH (Categories)
-		OrderedOfString_append (me, GET_STRING (U"Category"));
+		OrderedOfString_append (me, category);
 	MODIFY_EACH_END
 }
 
@@ -392,7 +392,7 @@ DIRECT (NEW_Categories_permuteItems) {
 /***************** CC ****************************************/
 
 FORM (INTEGER_CC_getNumberOfCoefficients, U"Get number of coefficients", nullptr) {
-	NATURALVAR (frameNumber, U"Frame number", U"1")
+	NATURAL (frameNumber, U"Frame number", U"1")
 	OK
 DO
 	INTEGER_ONE (CC)
@@ -401,8 +401,8 @@ DO
 }
 
 FORM (REAL_CC_getValue, U"CC: Get value", U"CC: Get value...") {
-	REALVAR (time, U"Time (s)", U"0.1")
-	NATURALVAR (index, U"Index", U"1")
+	REAL (time, U"Time (s)", U"0.1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	NUMBER_ONE (CC)
@@ -411,8 +411,8 @@ DO
 }
 
 FORM (REAL_CC_getValueInFrame, U"CC: Get value in frame", U"CC: Get value in frame...") {
-	NATURALVAR (frameNumber, U"Frame number", U"1")
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (frameNumber, U"Frame number", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	NUMBER_ONE (CC)
@@ -421,7 +421,7 @@ DO
 }
 
 FORM (REAL_CC_getC0ValueInFrame, U"CC: Get c0 value in frame", U"CC: Get c0 value in frame...") {
-	NATURALVAR (frameNumber, U"Frame number", U"1")
+	NATURAL (frameNumber, U"Frame number", U"1")
 	OK
 DO
 	NUMBER_ONE (CC)
@@ -431,11 +431,11 @@ DO
 
 FORM (GRAPHICS_CC_paint, U"CC: Paint", U"CC: Paint...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	INTEGERVAR (fromCoefficient, U"From coefficient", U"0")
-	INTEGERVAR (toCoefficient, U"To coefficient", U"0")
-	REALVAR (minimum, U"Minimum", U"0.0")
-	REALVAR (maximum, U"Maximum", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (fromCoefficient, U"From coefficient", U"0")
+	INTEGER (toCoefficient, U"To coefficient", U"0")
+	REAL (minimum, U"Minimum", U"0.0")
+	REAL (maximum, U"Maximum", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (CC)
@@ -445,9 +445,9 @@ DO
 
 FORM (GRAPHICS_CC_drawC0, U"CC: Draw c0", U"CC: Draw c0...") {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (CC)
@@ -457,11 +457,11 @@ DO
 
 FORM (NEW1_CCs_to_DTW, U"CC: To DTW", U"CC: To DTW...") {
 	LABEL (U"", U"Distance  between cepstral coefficients")
-	REALVAR (cepstralWeight, U"Cepstral weight", U"1.0")
-	REALVAR (logEnergyWeight, U"Log energy weight", U"0.0")
-	REALVAR (regressionWeight, U"Regression weight", U"0.0")
-	REALVAR (regressionLogEnergyWeight, U"Regression log energy weight", U"0.0")
-	REALVAR (regressionWindowLength, U"Regression window length (s)", U"0.056")
+	REAL (cepstralWeight, U"Cepstral weight", U"1.0")
+	REAL (logEnergyWeight, U"Log energy weight", U"0.0")
+	REAL (regressionWeight, U"Regression weight", U"0.0")
+	REAL (regressionLogEnergyWeight, U"Regression log energy weight", U"0.0")
+	REAL (regressionWindowLength, U"Regression window length (s)", U"0.056")
 	DTW_constraints_addCommonFields (matchStart, matchEnd, slopeConstraint)
 	OK
 DO
@@ -484,21 +484,21 @@ DIRECT (HELP_CCA_help) {
 }
 
 FORM (GRAPHICS_CCA_drawEigenvector, U"CCA: Draw eigenvector", U"Eigen: Draw eigenvector...") {
-	OPTIONMENUVAR (xOrY, U"X or Y", 1)
+	OPTIONMENU (xOrY, U"X or Y", 1)
 		OPTION (U"y")
 		OPTION (U"x")
-	INTEGERVAR (eigenVectorNumber, U"Eigenvector number", U"1")
+	INTEGER (eigenVectorNumber, U"Eigenvector number", U"1")
 	LABEL (U"", U"Multiply by eigenvalue?")
-	BOOLEANVAR (useComponentLoadings, U"Component loadings", false)
+	BOOLEAN (useComponentLoadings, U"Component loadings", false)
 	LABEL (U"", U"Select part of the eigenvector:")
-	INTEGERVAR (fromElement, U"left Element range", U"0")
-	INTEGERVAR (toElement, U"right Element range", U"0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"-1.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"1.0")
-	POSITIVEVAR (markSize_mm, U"Mark size (mm)", U"1.0")
-	SENTENCEVAR (mark_string, U"Mark string (+xo.)", U"+")
-	BOOLEANVAR (connectPoints, U"Connect points", true)
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (fromElement, U"left Element range", U"0")
+	INTEGER (toElement, U"right Element range", U"0")
+	REAL (fromAmplitude, U"left Amplitude range", U"-1.0")
+	REAL (toAmplitude, U"right Amplitude range", U"1.0")
+	POSITIVE (markSize_mm, U"Mark size (mm)", U"1.0")
+	SENTENCE (mark_string, U"Mark string (+xo.)", U"+")
+	BOOLEAN (connectPoints, U"Connect points", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (CCA)
@@ -513,7 +513,7 @@ DIRECT (INTEGER_CCA_getNumberOfCorrelations) {
 }
 
 FORM (REAL_CCA_getCorrelationCoefficient, U"CCA: Get canonical correlation coefficient", U"CCA: Get canonical correlation coefficient") {
-	NATURALVAR (coefficientNuber, U"Coefficient number", U"1")
+	NATURAL (coefficientNuber, U"Coefficient number", U"1")
 	OK
 DO
 	NUMBER_ONE (CCA)
@@ -522,11 +522,11 @@ DO
 }
 
 FORM (REAL_CCA_getEigenvectorElement, U"CCA: Get eigenvector element", U"Eigen: Get eigenvector element...") {
-	OPTIONMENUVAR (xOrY, U"X or Y", 1)
+	OPTIONMENU (xOrY, U"X or Y", 1)
 		OPTION (U"y")
 		OPTION (U"x")
-	NATURALVAR (eigenvectorNumber, U"Eigenvector number", U"1")
-	NATURALVAR (elementNumber, U"Element number", U"1")
+	NATURAL (eigenvectorNumber, U"Eigenvector number", U"1")
+	NATURAL (elementNumber, U"Element number", U"1")
 	OK
 DO
 	NUMBER_ONE (CCA)
@@ -535,7 +535,7 @@ DO
 }
 
 FORM (REAL_CCA_getZeroCorrelationProbability, U"CCA: Get zero correlation probability", U"CCA: Get zero correlation probability...") {
-	NATURALVAR (coefficientNumber, U"Coefficient number", U"1")
+	NATURAL (coefficientNumber, U"Coefficient number", U"1")
 	OK
 DO
 	NUMBER_ONE (CCA)
@@ -552,12 +552,12 @@ DIRECT (NEW1_CCA_and_Correlation_factorLoadings) {
 
 FORM (REAL_CCA_and_Correlation_getVarianceFraction, U"CCA & Correlation: Get variance fraction", U"CCA & Correlation: Get variance fraction...") {
 	LABEL (U"", U"Get the fraction of variance from the data in set...")
-	OPTIONMENUVAR (xOrY, U"X or Y", 1)
+	OPTIONMENU (xOrY, U"X or Y", 1)
 		OPTION (U"y")
 		OPTION (U"x")
 	LABEL (U"", U"extracted by...")
-	NATURALVAR (fromCanonicalVariate, U"left Canonical variate range", U"1")
-	NATURALVAR (toCanonicalVariate, U"right Canonical variate range", U"1")
+	NATURAL (fromCanonicalVariate, U"left Canonical variate range", U"1")
+	NATURAL (toCanonicalVariate, U"right Canonical variate range", U"1")
 	OK
 DO
 	NUMBER_TWO (CCA, Correlation)
@@ -567,12 +567,12 @@ DO
 
 FORM (REAL_CCA_and_Correlation_getRedundancy_sl, U"CCA & Correlation: Get Stewart-Love redundancy", U"CCA & Correlation: Get redundancy (sl)...") {
 	LABEL (U"", U"Get the redundancy of the data in set...")
-	OPTIONMENUVAR (xOrY, U"X or Y", 1)
+	OPTIONMENU (xOrY, U"X or Y", 1)
 		OPTION (U"y")
 		OPTION (U"x")
 	LABEL (U"", U"extracted by...")
-	NATURALVAR (fromCanonicalVariate, U"left Canonical variate range", U"1")
-	NATURALVAR (toCanonicalVariate, U"right Canonical variate range", U"1")
+	NATURAL (fromCanonicalVariate, U"left Canonical variate range", U"1")
+	NATURAL (toCanonicalVariate, U"right Canonical variate range", U"1")
 	LABEL (U"", U"...given the availability of the data in the other set.")
 	OK
 DO
@@ -588,7 +588,7 @@ DIRECT (NEW_CCA_and_TableOfReal_factorLoadings) {
 }
 
 FORM (NEW_CCA_and_TableOfReal_scores, U"CCA & TableOfReal: To TableOfReal (scores)", U"CCA & TableOfReal: To TableOfReal (scores)...") {
-	INTEGERVAR (numberOfCanonicalVariates, U"Number of canonical correlations", U"0 (= all)")
+	INTEGER (numberOfCanonicalVariates, U"Number of canonical correlations", U"0 (= all)")
 	OK
 DO
 	CONVERT_TWO (CCA, TableOfReal)
@@ -598,7 +598,7 @@ DO
 
 FORM (NEW1_CCA_and_TableOfReal_predict, U"CCA & TableOfReal: Predict", U"CCA & TableOfReal: Predict...") {
 	LABEL (U"", U"The data set from which to predict starts at...")
-	INTEGERVAR (columnNumber, U"Column number", U"1")
+	INTEGER (columnNumber, U"Column number", U"1")
 	OK
 DO
 	CONVERT_TWO (CCA, TableOfReal)
@@ -607,7 +607,7 @@ DO
 }
 
 FORM (NEW_CCA_extractEigen, U"CCA: Exxtract Eigen", nullptr) {
-	OPTIONMENUVAR (choice, U"variablesType", 1)
+	OPTIONMENU (choice, U"variablesType", 1)
 		OPTION (U"Dependent")
 		OPTION (U"Independent")
 	OK
@@ -624,13 +624,13 @@ DIRECT (HELP_ChebyshevSeries_help) {
 }
 
 FORM (NEW1_ChebyshevSeries_create, U"Create ChebyshevSeries", U"Create ChebyshevSeries...") {
-	WORDVAR (name, U"Name", U"cs")
+	WORD (name, U"Name", U"cs")
 	LABEL (U"", U"Domain")
-	REALVAR (xmin, U"Xmin", U"-1")
-	REALVAR (xmax, U"Xmax", U"1")
+	REAL (xmin, U"Xmin", U"-1")
+	REAL (xmax, U"Xmax", U"1")
 	LABEL (U"", U"ChebyshevSeries(x) = c[1] T[0](x) + c[2] T[1](x) + ... c[n+1] T[n](x)")
 	LABEL (U"", U"T[k] is a Chebyshev polynomial of degree k")
-	SENTENCEVAR (coefficients_string, U"Coefficients (c[k])", U"0 0 1.0")
+	SENTENCE (coefficients_string, U"Coefficients (c[k])", U"0 0 1.0")
 	OK
 DO
 	REQUIRE (xmin < xmax, U"Xmin must be smaller than Xmax.")
@@ -652,7 +652,7 @@ DIRECT (HELP_ClassificationTable_help) {
 }
 
 FORM (INTEGER_ClassificationTable_getClassIndexAtMaximumInRow, U"ClassificationTable: Get class index at maximum in row", nullptr) {
-	NATURALVAR (rowNumber, U"Row number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
 	OK
 DO
 	INTEGER_ONE (ClassificationTable)
@@ -661,7 +661,7 @@ DO
 }
 
 FORM (INTEGER_ClassificationTable_getClassLabelAtMaximumInRow, U"ClassificationTable: Get class label at maximum in row", nullptr) {
-	NATURALVAR (rowNumber, U"Row number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
 	OK
 DO
 	STRING_ONE (ClassificationTable)
@@ -677,7 +677,7 @@ DIRECT (NEW_ClassificationTable_to_Confusion_old) {
 }
 
 FORM (NEW_ClassificationTable_to_Confusion, U"ClassificationTable: To Confusion", U"ClassificationTable: To Confusion...") {
-	BOOLEAN4 (onlyClassLabels, U"Only class labels", true)
+	BOOLEAN (onlyClassLabels, U"Only class labels", true)
 	OK
 DO
 	CONVERT_EACH (ClassificationTable)
@@ -704,8 +704,8 @@ DIRECT (HELP_Confusion_help) {
 }
 
 FORM (NEW1_Confusion_createSimple, U"Create simple Confusion", U"Create simple Confusion...") {
-	WORDVAR (name, U"Name", U"simple")
-	SENTENCEVAR (labels, U"Labels", U"u i a")
+	WORD (name, U"Name", U"simple")
+	SENTENCE (labels, U"Labels", U"u i a")
 	OK
 DO
 	CREATE_ONE
@@ -714,8 +714,8 @@ DO
 }
 
 FORM (MODIFY_Confusion_increase, U"Confusion: Increase", U"Confusion: Increase...") {
-	WORDVAR (stimulus, U"Stimulus", U"u")
-	WORDVAR (response, U"Response", U"i")
+	WORD (stimulus, U"Stimulus", U"u")
+	WORD (response, U"Response", U"i")
 	OK
 DO
 	MODIFY_EACH (Confusion)
@@ -724,8 +724,8 @@ DO
 }
 
 FORM (REAL_Confusion_getValue, U"Confusion: Get value", nullptr) {
-	WORDVAR (stimulus, U"Stimulus", U"u")
-	WORDVAR (response, U"Response", U"i")
+	WORD (stimulus, U"Stimulus", U"u")
+	WORD (response, U"Response", U"i")
 	OK
 DO
 	NUMBER_ONE (Confusion)
@@ -734,7 +734,7 @@ DO
 }
 
 FORM (REAL_Confusion_getResponseSum, U"Confusion: Get response sum", U"Confusion: Get response sum...") {
-	WORDVAR (response, U"Response", U"u")
+	WORD (response, U"Response", U"u")
 	OK
 DO
 	NUMBER_ONE (TableOfReal)
@@ -743,7 +743,7 @@ DO
 }
 
 FORM (REAL_Confusion_getStimulusSum, U"Confusion: Get stimulus sum", U"Confusion: Get stimulus sum...") {
-	WORDVAR (stimulus, U"Stimulus", U"u")
+	WORD (stimulus, U"Stimulus", U"u")
 	OK
 DO
 	NUMBER_ONE (TableOfReal)
@@ -764,10 +764,10 @@ DIRECT (NEW1_Confusion_difference) {
 }
 
 FORM (NEW_Confusion_condense, U"Confusion: Condense", U"Confusion: Condense...") {
-	SENTENCEVAR (search_string, U"Search", U"^(u|i)$")
-	SENTENCEVAR (replace_string, U"Replace", U"high")
-	INTEGERVAR (replaceLimit, U"Replace limit", U"0 (= unlimited)")
-	RADIOVARx (matchType, U"Search and replace are", 2, 0)
+	SENTENCE (search_string, U"Search", U"^(u|i)$")
+	SENTENCE (replace_string, U"Replace", U"high")
+	INTEGER (replaceLimit, U"Replace limit", U"0 (= unlimited)")
+	RADIOx (matchType, U"Search and replace are", 2, 0)
 		RADIOBUTTON (U"Literals")
 		RADIOBUTTON (U"Regular Expressions")
 	OK
@@ -778,9 +778,9 @@ DO
 }
 
 FORM (NEW_Confusion_group, U"Confusion: Group stimuli & responses", U"Confusion: Group...") {
-	SENTENCEVAR (labels, U"Stimuli & Responses", U"u i")
-	SENTENCEVAR (newLabel, U"New label", U"high")
-	INTEGERVAR (newPosition, U"New label position", U"0 (= at start)")
+	SENTENCE (labels, U"Stimuli & Responses", U"u i")
+	SENTENCE (newLabel, U"New label", U"high")
+	INTEGER (newPosition, U"New label position", U"0 (= at start)")
 	OK
 DO
 	CONVERT_EACH (Confusion)
@@ -789,9 +789,9 @@ DO
 }
 
 FORM (NEW_Confusion_groupStimuli, U"Confusion: Group stimuli", U"Confusion: Group stimuli...") {
-	SENTENCEVAR (stimuli_string, U"Stimuli", U"u i")
-	SENTENCEVAR (newLabel, U"New label", U"high")
-	INTEGERVAR (newPosition, U"New label position", U"0")
+	SENTENCE (stimuli_string, U"Stimuli", U"u i")
+	SENTENCE (newLabel, U"New label", U"high")
+	INTEGER (newPosition, U"New label position", U"0")
 	OK
 DO
 	CONVERT_EACH (Confusion)
@@ -800,9 +800,9 @@ DO
 }
 
 FORM (NEW_Confusion_groupResponses, U"Confusion: Group responses", U"Confusion: Group responses...") {
-	SENTENCEVAR (responses_string, U"Responses", U"a i")
-	SENTENCEVAR (newLabel, U"New label", U"front")
-	INTEGERVAR (newPosition, U"New label position", U"0")
+	SENTENCE (responses_string, U"Responses", U"a i")
+	SENTENCE (newLabel, U"New label", U"front")
+	INTEGER (newPosition, U"New label position", U"0")
 	OK
 DO
 	CONVERT_EACH (Confusion)
@@ -811,13 +811,13 @@ DO
 }
 
 FORM (GRAPHICS_Confusion_drawAsNumbers, U"Confusion: Draw as numbers", nullptr) {
-	BOOLEANVAR (drawMarginals, U"Draw marginals", true)
-	RADIOVAR (format, U"Format", 3)
+	BOOLEAN (drawMarginals, U"Draw marginals", true)
+	RADIO (format, U"Format", 3)
 		RADIOBUTTON (U"decimal")
 		RADIOBUTTON (U"exponential")
 		RADIOBUTTON (U"free")
 		RADIOBUTTON (U"rational")
-	NATURALVAR (precision, U"Precision", U"5")
+	NATURAL (precision, U"Precision", U"5")
 	OK
 DO
 	GRAPHICS_EACH (Confusion)
@@ -841,13 +841,13 @@ DIRECT (MODIFY_Confusion_and_ClassificationTable_increase) {
 /******************* Confusion & Matrix *************************************/
 
 FORM (GRAPHICS_Confusion_Matrix_draw, U"Confusion & Matrix: Draw confusions with arrows", nullptr) {
-	INTEGERVAR (categoryPosition, U"Category position", U"0 (= all)")
-	REALVAR (lowerLevel, U"Lower level (%)", U"0")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (categoryPosition, U"Category position", U"0 (= all)")
+	REAL (lowerLevel, U"Lower level (%)", U"0")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	REQUIRE (categoryPosition >= 0, U"Category position must be >= 0")
@@ -863,7 +863,7 @@ DIRECT (HELP_ComplexSpectrogram_help) {
 }
 
 FORM (NEW_ComplexSpectrogram_to_Sound, U"ComplexSpectrogram: To Sound", nullptr) {
-	POSITIVEVAR (durationFactor, U"Duration factor", U"1.0")
+	POSITIVE (durationFactor, U"Duration factor", U"1.0")
 	OK
 DO
 	CONVERT_EACH (ComplexSpectrogram)
@@ -878,7 +878,7 @@ DIRECT (NEW_ComplexSpectrogram_to_Spectrogram) {
 }
 
 FORM (NEW_ComplexSpectrogram_to_Spectrum, U"ComplexSpectrogram: To Spectrum (slice)", nullptr) {
-	REALVAR (time, U"Time (s)", U"0.0")
+	REAL (time, U"Time (s)", U"0.0")
 	OK
 DO
 	CONVERT_EACH (ComplexSpectrogram)
@@ -889,10 +889,10 @@ DO
 /********************** Correlation *******************************************/
 
 FORM (NEW1_Correlation_createSimple, U"Create simple Correlation", U"Create simple Correlation...") {
-	WORDVAR (name, U"Name", U"correlation")
-	SENTENCEVAR (correlations_string, U"Correlations", U"1.0 0.5 1.0")
-	SENTENCEVAR (centroid_string, U"Centroid", U"0.0 0.0")
-	NATURALVAR (numberOfObservations, U"Number of observations", U"100")
+	WORD (name, U"Name", U"correlation")
+	SENTENCE (correlations_string, U"Correlations", U"1.0 0.5 1.0")
+	SENTENCE (centroid_string, U"Centroid", U"0.0 0.0")
+	NATURAL (numberOfObservations, U"Number of observations", U"100")
 	OK
 DO
 	CREATE_ONE
@@ -905,9 +905,9 @@ DIRECT (HELP_Correlation_help) {
 }
 
 FORM (NEW_Correlation_confidenceIntervals, U"Correlation: Confidence intervals...", U"Correlation: Confidence intervals...") {
-	POSITIVEVAR (confidenceLevel, U"Confidence level (0-1)", U"0.95")
-	INTEGERVAR (numberOfTests, U"Number of tests (Bonferroni correction)", U"0")
-	RADIOVAR (approximation, U"Approximation", 1)
+	POSITIVE (confidenceLevel, U"Confidence level (0-1)", U"0.95")
+	INTEGER (numberOfTests, U"Number of tests (Bonferroni correction)", U"0")
+	RADIO (approximation, U"Approximation", 1)
 		RADIOBUTTON (U"Ruben")
 		RADIOBUTTON (U"Fisher")
 	OK
@@ -918,7 +918,7 @@ DO
 }
 
 FORM (REAL_Correlation_testDiagonality_bartlett, U"Correlation: Get diagonality (bartlett)", U"SSCP: Get diagonality (bartlett)...") {
-	NATURALVAR (numberOfConstraints, U"Number of constraints", U"1")
+	NATURAL (numberOfConstraints, U"Number of constraints", U"1")
 	OK
 DO
 	NUMBER_ONE (Correlation)
@@ -940,10 +940,10 @@ DIRECT (HELP_Covariance_help) {
 }
 
 FORM (NEW1_Covariance_createSimple, U"Create simple Covariance", U"Create simple Covariance...") {
-	WORDVAR (name, U"Name", U"c")
-	SENTENCEVAR (covariances_string, U"Covariances", U"1.0 0.0 1.0")
-	SENTENCEVAR (centroid_string, U"Centroid", U"0.0 0.0")
-	NATURALVAR (numberOfObservations, U"Number of observations", U"100")
+	WORD (name, U"Name", U"c")
+	SENTENCE (covariances_string, U"Covariances", U"1.0 0.0 1.0")
+	SENTENCE (centroid_string, U"Centroid", U"0.0 0.0")
+	NATURAL (numberOfObservations, U"Number of observations", U"100")
 	OK
 DO
 	CREATE_ONE
@@ -952,7 +952,7 @@ DO
 }
 
 FORM (REAL_Covariance_getProbabilityAtPosition, U"Covariance: Get probability at position", nullptr) {
-	SENTENCEVAR (position_string, U"Position", U"10.0 20.0")
+	SENTENCE (position_string, U"Position", U"10.0 20.0")
 	OK
 DO
 	NUMBER_ONE (Covariance)
@@ -962,10 +962,10 @@ DO
 
 FORM (REAL_Covariance_getSignificanceOfOneMean, U"Covariance: Get significance of one mean", U"Covariance: Get significance of one mean...") {
 	LABEL (U"", U"Get probability that the estimated mean for")
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (index, U"Index", U"1")
 	LABEL (U"", U"(or an estimated mean even further away)")
 	LABEL (U"", U"could arise if the true mean were")
-	REALVAR (value, U"Value", U"0.0")
+	REAL (value, U"Value", U"0.0")
 	OK
 DO
 	NUMBER_ONE (Covariance)
@@ -976,14 +976,14 @@ DO
 
 FORM (REAL_Covariance_getSignificanceOfMeansDifference, U"Covariance: Get significance of means difference", U"Covariance: Get significance of means difference...") {
 	LABEL (U"", U"Get probability that the estimated difference between the means for")
-	NATURALVAR (index1, U"Index1", U"1")
-	NATURALVAR (index2, U"Index2", U"2")
+	NATURAL (index1, U"Index1", U"1")
+	NATURAL (index2, U"Index2", U"2")
 	LABEL (U"", U"could arise if the true mean were")
-	REALVAR (value, U"Value", U"0.0")
+	REAL (value, U"Value", U"0.0")
 	LABEL (U"", U"Assume the means are ")
-	BOOLEANVAR (paired, U"Paired", true)
+	BOOLEAN (paired, U"Paired", true)
 	LABEL (U"", U"and have")
-	BOOLEANVAR (equalVariances, U"Equal variances", true)
+	BOOLEAN (equalVariances, U"Equal variances", true)
 	OK
 DO
 	NUMBER_ONE (Covariance)
@@ -994,10 +994,10 @@ DO
 
 FORM (REAL_Covariance_getSignificanceOfOneVariance, U"Covariance: Get significance of one variance", U"Covariance: Get significance of one variance...") {
 	LABEL (U"", U"Get the probability that the estimated variance for")
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (index, U"Index", U"1")
 	LABEL (U"", U"(or an even larger estimated variance)")
 	LABEL (U"", U"could arise if the true variance were")
-	REALVAR (value, U"Value", U"0.0")
+	REAL (value, U"Value", U"0.0")
 	OK
 DO
 	NUMBER_ONE (Covariance)
@@ -1008,11 +1008,11 @@ DO
 
 FORM (REAL_Covariance_getSignificanceOfVariancesRatio, U"Covariance: Get significance of variances ratio", nullptr) {
 	LABEL (U"", U"Get the probability that the estimated variance ratio observed for")
-	NATURALVAR (index1, U"Index1", U"1")
-	NATURALVAR (index2, U"Index2", U"2")
+	NATURAL (index1, U"Index1", U"1")
+	NATURAL (index2, U"Index2", U"2")
 	LABEL (U"", U"(or an estimated ratio even further away)")
 	LABEL (U"", U"could arise if the true ratio were")
-	REALVAR (value, U"Value", U"1.0")
+	REAL (value, U"Value", U"1.0")
 	OK
 DO
 	NUMBER_ONE (Covariance)
@@ -1022,8 +1022,8 @@ DO
 }
 
 FORM (REAL_Covariance_getFractionVariance, U"Covariance: Get fraction variance", U"Covariance: Get fraction variance...") {
-	NATURALVAR (fromDimension, U"From dimension", U"1")
-	NATURALVAR (toDimension, U"To dimension", U"1")
+	NATURAL (fromDimension, U"From dimension", U"1")
+	NATURAL (toDimension, U"To dimension", U"1")
 	OK
 DO
 	NUMBER_ONE (Covariance)
@@ -1036,7 +1036,7 @@ FORM (INFO_Covariances_reportMultivariateMeanDifference, U"Covariances: Report m
 	LABEL (U"", U"if the actual means were equal.")
 	LABEL (U"", U"")
 	LABEL (U"", U"Assume for both means we have")
-	BOOLEANVAR (covariancesAreEqual, U"Equal covariances", true)
+	BOOLEAN (covariancesAreEqual, U"Equal covariances", true)
 	OK
 DO
 	INFO_COUPLE (Covariance)
@@ -1055,7 +1055,7 @@ DO
 }
 
 FORM (NEW_Covariance_to_TableOfReal_randomSampling, U"Covariance: To TableOfReal (random sampling)", U"Covariance: To TableOfReal (random sampling)...") {
-	INTEGERVAR (numberOfDataPoints, U"Number of data points", U"0")
+	INTEGER (numberOfDataPoints, U"Number of data points", U"0")
 	OK
 DO
 	CONVERT_EACH (Covariance)
@@ -1103,7 +1103,7 @@ DIRECT (NEW1_Covariances_pool) {
 }
 
 FORM (NEW1_Covariance_and_TableOfReal_mahalanobis, U"Covariance & TableOfReal: To TableOfReal (mahalanobis)", U"Covariance & TableOfReal: To TableOfReal (mahalanobis)...") {
-	BOOLEANVAR (centroidFromTable, U"Centroid from table", 0)
+	BOOLEAN (centroidFromTable, U"Centroid from table", false)
 	OK
 DO
 	CONVERT_TWO (Covariance, TableOfReal)
@@ -1124,8 +1124,8 @@ DIRECT (MODIFY_Discriminant_setGroupLabels) {
 }
 
 FORM (NEW1_Discriminant_and_PatternList_to_Categories, U"Discriminant & PatternList: To Categories", U"Discriminant & PatternList: To Categories...") {
-	BOOLEANVAR (poolCovariances, U"Pool covariance matrices", true)
-	BOOLEANVAR (useAPrioriProbabilities, U"Use apriori probabilities", true)
+	BOOLEAN (poolCovariances, U"Pool covariance matrices", true)
+	BOOLEAN (useAPrioriProbabilities, U"Use apriori probabilities", true)
 	OK
 DO
 	CONVERT_TWO (Discriminant, PatternList)
@@ -1134,10 +1134,10 @@ DO
 }
 
 FORM (NEW1_Discriminant_and_TableOfReal_to_Configuration, U"Discriminant & TableOfReal: To Configuration", U"Discriminant & TableOfReal: To Configuration...") {
-		INTEGERVAR (numberOfDimensions, U"Number of dimensions", U"0")
-		OK
+	INTEGER (numberOfDimensions, U"Number of dimensions", U"0")
+	OK
 DO
-	REQUIRE (numberOfDimensions >= 0, U"Number of dimensions must be greater equal zero.")
+	REQUIRE (numberOfDimensions >= 0, U"The number of dimensions should be at least zero.")
 	CONVERT_TWO (Discriminant, TableOfReal)
 		autoConfiguration result = Discriminant_and_TableOfReal_to_Configuration (me, you, numberOfDimensions);
 	CONVERT_TWO_END (my name, U"_", your name)
@@ -1148,8 +1148,8 @@ DIRECT (hint_Discriminant_and_TableOfReal_to_ClassificationTable) {
 END }
 
 FORM (NEW1_Discriminant_and_TableOfReal_to_ClassificationTable, U"Discriminant & TableOfReal: To ClassificationTable", U"Discriminant & TableOfReal: To ClassificationTable...") {
-	BOOLEANVAR (poolCovariances, U"Pool covariance matrices", true)
-	BOOLEANVAR (useAPrioriProbabilities, U"Use apriori probabilities", true)
+	BOOLEAN (poolCovariances, U"Pool covariance matrices", true)
+	BOOLEAN (useAPrioriProbabilities, U"Use apriori probabilities", true)
 	OK
 DO
 	CONVERT_TWO (Discriminant, TableOfReal)
@@ -1158,8 +1158,8 @@ DO
 }
 
 FORM (NEW1_Discriminant_and_TableOfReal_mahalanobis, U"Discriminant & TableOfReal: To TableOfReal (mahalanobis)", U"Discriminant & TableOfReal: To TableOfReal (mahalanobis)...") {
-	SENTENCEVAR (groupLabel, U"Group label", U"")
-	BOOLEANVAR (poolCovariances, U"Pool covariance matrices", false)
+	SENTENCE (groupLabel, U"Group label", U"")
+	BOOLEAN (poolCovariances, U"Pool covariance matrices", false)
 	OK
 DO
 	CONVERT_TWO (Discriminant, TableOfReal)
@@ -1182,7 +1182,7 @@ DIRECT (INTEGER_Discriminant_getDimension) {
 }
 
 FORM (REAL_Discriminant_getEigenvalue, U"Discriminant: Get eigenvalue", U"Eigen: Get eigenvalue...") {
-	NATURALVAR (eigenvalueNumber, U"Eigenvalue number", U"1")
+	NATURAL (eigenvalueNumber, U"Eigenvalue number", U"1")
 	OK
 DO
 	NUMBER_ONE (Discriminant)
@@ -1194,8 +1194,8 @@ DO
 }
 
 FORM (REAL_Discriminant_getSumOfEigenvalues, U"Discriminant:Get sum of eigenvalues", U"Eigen: Get sum of eigenvalues...") {
-	INTEGERVAR (fromEigenvalue, U"left Eigenvalue range",  U"0")
-	INTEGERVAR (toEigenvalue, U"right Eigenvalue range", U"0")
+	INTEGER (fromEigenvalue, U"left Eigenvalue range",  U"0")
+	INTEGER (toEigenvalue, U"right Eigenvalue range", U"0")
 	OK
 DO
 	NUMBER_ONE (Discriminant)
@@ -1204,8 +1204,8 @@ DO
 }
 
 FORM (REAL_Discriminant_getEigenvectorElement, U"Discriminant: Get eigenvector element", U"Eigen: Get eigenvector element...") {
-	NATURALVAR (eigenvectorNumber, U"Eigenvector number", U"1")
-	NATURALVAR (elementNumber, U"Element number", U"1")
+	NATURAL (eigenvectorNumber, U"Eigenvector number", U"1")
+	NATURAL (elementNumber, U"Element number", U"1")
 	OK
 DO
 	NUMBER_ONE (Discriminant)
@@ -1215,7 +1215,7 @@ DO
 
 FORM (REAL_Discriminant_getWilksLambda, U"Discriminant: Get Wilks' lambda", U"Discriminant: Get Wilks' lambda...") {
 	LABEL (U"", U"Product (i=from..numberOfEigenvalues, 1 / (1 + eigenvalue[i]))")
-	INTEGERVAR (from, U"From", U"1") //TODO better name
+	INTEGER (from, U"From", U"1") //TODO better name
 	OK
 DO
 	REQUIRE (from >= 1, U"Number must be greater than or equal to one.")
@@ -1225,8 +1225,8 @@ DO
 }
 
 FORM (REAL_Discriminant_getCumulativeContributionOfComponents, U"Discriminant: Get cumulative contribution of components", U"Eigen: Get cumulative contribution of components...") {
-	NATURALVAR (fromComponent, U"From component", U"1")
-	NATURALVAR (toComponent, U"To component", U"1")
+	NATURAL (fromComponent, U"From component", U"1")
+	NATURAL (toComponent, U"To component", U"1")
 	OK
 DO
 	NUMBER_ONE (Discriminant)
@@ -1236,7 +1236,7 @@ DO
 
 
 FORM (REAL_Discriminant_getPartialDiscriminationProbability, U"Discriminant: Get partial discrimination probability", U"Discriminant: Get partial discrimination probability...") {
-	INTEGERVAR (numberOfDimensions, U"Number of dimensions", U"1")
+	INTEGER (numberOfDimensions, U"Number of dimensions", U"1")
 	OK
 DO
 	REQUIRE (numberOfDimensions >= 0, U"Number of dimensions must be greater than or equal to zero.")
@@ -1275,11 +1275,11 @@ DIRECT (INFO_Discriminant_reportEqualityOfCovariances_wald) {
 END }
 
 FORM (REAL_Discriminant_getConcentrationEllipseArea, U"Discriminant: Get concentration ellipse area", U"Discriminant: Get concentration ellipse area...") {
-	SENTENCEVAR (groupLabel, U"Group label", U"")
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	BOOLEANVAR (discriminatPlane, U"Discriminant plane", true)
-	INTEGERVAR (xDimension, U"X-dimension", U"1")
-	INTEGERVAR (yDimension, U"Y-dimension", U"2")
+	SENTENCE (groupLabel, U"Group label", U"")
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"1.0")
+	BOOLEAN (discriminatPlane, U"Discriminant plane", true)
+	INTEGER (xDimension, U"X-dimension", U"1")
+	INTEGER (yDimension, U"Y-dimension", U"2")
 	OK
 DO
 	NUMBER_ONE (Discriminant)
@@ -1290,11 +1290,11 @@ DO
 }
 
 FORM (REAL_Discriminant_getConfidenceEllipseArea, U"Discriminant: Get confidence ellipse area", U"Discriminant: Get confidence ellipse area...") {
-	SENTENCEVAR (groupLabel, U"Group label", U"")
-	POSITIVEVAR (confidenceLevel, U"Confidence level (0-1)", U"0.95")
-	BOOLEANVAR (discriminatPlane, U"Discriminant plane", true)
-	INTEGERVAR (xDimension, U"X-dimension", U"1")
-	INTEGERVAR (yDimension, U"Y-dimension", U"2")
+	SENTENCE (groupLabel, U"Group label", U"")
+	POSITIVE (confidenceLevel, U"Confidence level (0-1)", U"0.95")
+	BOOLEAN (discriminatPlane, U"Discriminant plane", true)
+	INTEGER (xDimension, U"X-dimension", U"1")
+	INTEGER (yDimension, U"Y-dimension", U"2")
 	OK
 DO
 	NUMBER_ONE (Discriminant)
@@ -1305,7 +1305,7 @@ DO
 }
 
 FORM (REAL_Discriminant_getLnDeterminant_group, U"Discriminant: Get determinant (group)", U"Discriminant: Get determinant (group)...")
-	SENTENCEVAR (groupLabel, U"Group label", U"") {
+	SENTENCE (groupLabel, U"Group label", U"") {
 	OK
 DO
 	NUMBER_ONE (Discriminant)
@@ -1322,7 +1322,7 @@ DIRECT (REAL_Discriminant_getLnDeterminant_total) {
 }
 
 FORM (MODIFY_Discriminant_invertEigenvector, U"Discriminant: Invert eigenvector", nullptr) {
-	NATURALVAR (eigenvectorNumber, U"Eigenvector number", U"1")
+	NATURAL (eigenvectorNumber, U"Eigenvector number", U"1")
 	OK
 DO
 	MODIFY_EACH (Discriminant)
@@ -1331,15 +1331,15 @@ DO
 }
 
 FORM (GRAPHICS_Discriminant_drawEigenvalues, U"Discriminant: Draw eigenvalues", U"Eigen: Draw eigenvalues...") {
-	INTEGERVAR (fromEigenvalue, U"left Eigenvalue range", U"0")
-	INTEGERVAR (toEigenvalue, U"right Eigenvalue range", U"0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
-	BOOLEANVAR (showFractions, U"Fraction of eigenvalues summed", false)
-	BOOLEANVAR (showCumulativeValues, U"Cumulative", false)
-	POSITIVEVAR (markSize_mm, U"Mark size (mm)", U"1.0")
-	SENTENCEVAR (mark_string, U"Mark string (+xo.)", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (fromEigenvalue, U"left Eigenvalue range", U"0")
+	INTEGER (toEigenvalue, U"right Eigenvalue range", U"0")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
+	BOOLEAN (showFractions, U"Fraction of eigenvalues summed", false)
+	BOOLEAN (showCumulativeValues, U"Cumulative", false)
+	POSITIVE (markSize_mm, U"Mark size (mm)", U"1.0")
+	SENTENCE (mark_string, U"Mark string (+xo.)", U"+")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Discriminant)
@@ -1348,16 +1348,16 @@ DO
 }
 
 FORM (GRAPHICS_Discriminant_drawEigenvector, U"Discriminant: Draw eigenvector", U"Eigen: Draw eigenvector...") {
-	INTEGERVAR (eigenvectorNumber, U"Eigenvector number", U"1")
-	BOOLEANVAR (componentLoadings, U"Component loadings", false)
-	INTEGERVAR (fromElement, U"left Element range", U"0")
-	INTEGERVAR (toElement, U"right Element range", U"0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"-1.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"1.0")
-	POSITIVEVAR (markSize_mm, U"Mark size (mm)", U"1.0")
-	SENTENCEVAR (mark_string, U"Mark string (+xo.)", U"+")
-	BOOLEANVAR (connectPoints, U"Connect points", true)
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (eigenvectorNumber, U"Eigenvector number", U"1")
+	BOOLEAN (componentLoadings, U"Component loadings", false)
+	INTEGER (fromElement, U"left Element range", U"0")
+	INTEGER (toElement, U"right Element range", U"0")
+	REAL (fromAmplitude, U"left Amplitude range", U"-1.0")
+	REAL (toAmplitude, U"right Amplitude range", U"1.0")
+	POSITIVE (markSize_mm, U"Mark size (mm)", U"1.0")
+	SENTENCE (mark_string, U"Mark string (+xo.)", U"+")
+	BOOLEAN (connectPoints, U"Connect points", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Discriminant)
@@ -1367,16 +1367,16 @@ DO
 
 
 FORM (GRAPHICS_Discriminant_drawSigmaEllipses, U"Discriminant: Draw sigma ellipses", U"Discriminant: Draw sigma ellipses...") {
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	BOOLEANVAR (discriminantPlane, U"Discriminant plane", true)
-	INTEGERVAR (xDimension, U"X-dimension", U"1")
-	INTEGERVAR (yDimension, U"Y-dimension", U"2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	INTEGERVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"1.0")
+	BOOLEAN (discriminantPlane, U"Discriminant plane", true)
+	INTEGER (xDimension, U"X-dimension", U"1")
+	INTEGER (yDimension, U"Y-dimension", U"2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	INTEGER (labelSize, U"Label size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Discriminant)
@@ -1385,17 +1385,17 @@ DO
 }
 
 FORM (GRAPHICS_Discriminant_drawOneSigmaEllipse, U"Discriminant: Draw one sigma ellipse", U"Discriminant: Draw one sigma ellipse...") {
-	SENTENCEVAR (label, U"Label", U"")
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	BOOLEANVAR (discriminatPlane, U"Discriminant plane", true)
-	INTEGERVAR (xDimension, U"X-dimension", U"1")
-	INTEGERVAR (yDimension, U"Y-dimension", U"2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	INTEGERVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	SENTENCE (label, U"Label", U"")
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"1.0")
+	BOOLEAN (discriminatPlane, U"Discriminant plane", true)
+	INTEGER (xDimension, U"X-dimension", U"1")
+	INTEGER (yDimension, U"Y-dimension", U"2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	INTEGER (labelSize, U"Label size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Discriminant)
@@ -1404,16 +1404,16 @@ DO
 }
 
 FORM (GRAPHICS_Discriminant_drawConfidenceEllipses, U"Discriminant: Draw confidence ellipses", nullptr) {
-	POSITIVEVAR (confidenceLevel, U"Confidence level (0-1)", U"0.95")
-	BOOLEANVAR (discriminatPlane, U"Discriminant plane", true)
-	INTEGERVAR (xDimension, U"X-dimension", U"1")
-	INTEGERVAR (yDimension, U"Y-dimension", U"2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	INTEGERVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	POSITIVE (confidenceLevel, U"Confidence level (0-1)", U"0.95")
+	BOOLEAN (discriminatPlane, U"Discriminant plane", true)
+	INTEGER (xDimension, U"X-dimension", U"1")
+	INTEGER (yDimension, U"Y-dimension", U"2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	INTEGER (labelSize, U"Label size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Discriminant)
@@ -1422,17 +1422,17 @@ DO
 }
 
 FORM (GRAPHICS_Discriminant_drawOneConfidenceEllipse, U"Discriminant: Draw one confidence ellipse", nullptr) {
-	SENTENCEVAR (label, U"Label", U"")
-	POSITIVEVAR (confidenceLevel, U"Confidence level (0-1)", U"0.95")
-	BOOLEANVAR (discriminatPlane, U"Discriminant plane", true)
-	INTEGERVAR (xDimension, U"X-dimension", U"1")
-	INTEGERVAR (yDimension, U"Y-dimension", U"2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	INTEGERVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	SENTENCE (label, U"Label", U"")
+	POSITIVE (confidenceLevel, U"Confidence level (0-1)", U"0.95")
+	BOOLEAN (discriminatPlane, U"Discriminant plane", true)
+	INTEGER (xDimension, U"X-dimension", U"1")
+	INTEGER (yDimension, U"Y-dimension", U"2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	INTEGER (labelSize, U"Label size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Discriminant)
@@ -1477,7 +1477,7 @@ DIRECT (NEW_Discriminant_extractPooledWithinGroupsSSCP) {
 }
 
 FORM (NEW_Discriminant_extractWithinGroupSSCP, U"Discriminant: Extract within-group SSCP", U"Discriminant: Extract within-group SSCP...") {
-	NATURALVAR (groupIndex, U"Group index", U"1")
+	NATURAL (groupIndex, U"Group index", U"1")
 	OK
 DO
 	CONVERT_EACH (Discriminant)
@@ -1504,7 +1504,7 @@ DIRECT (INTEGER_Discriminant_getNumberOfGroups) {
 }
 
 FORM (INTEGER_Discriminant_getNumberOfObservations, U"Discriminant: Get number of observations", U"Discriminant: Get number of observations...") {
-	INTEGERVAR (group, U"Group", U"0 (= total)")
+	INTEGER (group, U"Group", U"0 (= total)")
 	OK
 DO
 	INTEGER_ONE (Discriminant)
@@ -1516,7 +1516,7 @@ DO
 /********************** DTW *******************************************/
 
 FORM (MODIFY_DTW_and_Polygon_findPathInside, U"DTW & Polygon: Find path inside", nullptr) {
-    RADIOVAR (slopeConstraint, U"Slope constraint", 1)
+    RADIO (slopeConstraint, U"Slope constraint", 1)
 		RADIOBUTTON (U"no restriction")
 		RADIOBUTTON (U"1/3 < slope < 3")
 		RADIOBUTTON (U"1/2 < slope < 2")
@@ -1529,7 +1529,7 @@ DO
 }
 
 FORM (NEW1_DTW_and_Polygon_to_Matrix_cumulativeDistances, U"DTW & Polygon: To Matrix (cum. distances)", nullptr) {
-    RADIOVAR (slopeConstraint, U"Slope constraint", 1)
+    RADIO (slopeConstraint, U"Slope constraint", 1)
 		RADIOBUTTON (U"no restriction")
 		RADIOBUTTON (U"1/3 < slope < 3")
 		RADIOBUTTON (U"1/2 < slope < 2")
@@ -1542,11 +1542,11 @@ DO
 }
 
 FORM (GRAPHICS_DTW_and_Sounds_draw, U"DTW & Sounds: Draw", U"DTW & Sounds: Draw...") {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_COUPLE_AND_ONE (Sound, DTW)
@@ -1555,12 +1555,12 @@ DO
 }
 
 FORM (GRAPHICS_DTW_and_Sounds_drawWarpX, U"DTW & Sounds: Draw warp (x)", U"DTW & Sounds: Draw warp (x)...") {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	REALVAR (time, U"Time (s)", U"0.1")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	REAL (time, U"Time (s)", U"0.1")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_COUPLE_AND_ONE (Sound, DTW)
@@ -1573,11 +1573,11 @@ DIRECT (HELP_DTW_help) {
 }
 
 FORM (GRAPHICS_DTW_drawPath, U"DTW: Draw path", nullptr) {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", false);
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", false);
 	OK
 DO
 	GRAPHICS_EACH (DTW)
@@ -1586,11 +1586,11 @@ DO
 }
 
 FORM (GRAPHICS_DTW_drawDistancesAlongPath, U"DTW: Draw distances along path", nullptr) {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", false);
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", false);
 	OK
 DO
 	GRAPHICS_EACH (DTW)
@@ -1599,13 +1599,13 @@ DO
 }
 
 FORM (GRAPHICS_DTW_paintDistances, U"DTW: Paint distances", nullptr) {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	REALVAR (minimum, U"Minimum", U"0.0")
-	REALVAR (maximum, U"Maximum", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", false);
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	REAL (minimum, U"Minimum", U"0.0")
+	REAL (maximum, U"Maximum", U"0.0")
+	BOOLEAN (garnish, U"Garnish", false);
 	OK
 DO
 	GRAPHICS_EACH (DTW)
@@ -1614,12 +1614,12 @@ DO
 }
 
 FORM (GRAPHICS_DTW_drawWarpX, U"DTW: Draw warp (x)", U"DTW: Draw warp (x)...") {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	REALVAR (time, U"Time (s)", U"0.1")
-	BOOLEANVAR (garnish, U"Garnish", false);
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	REAL (time, U"Time (s)", U"0.1")
+	BOOLEAN (garnish, U"Garnish", false);
 	OK
 DO
 	GRAPHICS_EACH (DTW)
@@ -1629,12 +1629,12 @@ DO
 
 
 FORM (GRAPHICS_DTW_drawWarpY, U"DTW: Draw warp (y)", U"DTW: Draw warp (y)...") {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	REALVAR (time, U"Time (s)", U"0.1")
-	BOOLEANVAR (garnish, U"Garnish", false);
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	REAL (time, U"Time (s)", U"0.1")
+	BOOLEAN (garnish, U"Garnish", false);
 	OK
 DO
 	GRAPHICS_EACH (DTW)
@@ -1692,7 +1692,7 @@ DIRECT (REAL_DTW_getTimeStepX) {
 }
 
 FORM (REAL_DTW_getTimeFromFrameNumberX, U"DTW: Get time from frame number (x)", nullptr) {
-	NATURALVAR (frameNumber, U"Frame number (x)", U"1")
+	NATURAL (frameNumber, U"Frame number (x)", U"1")
 	OK
 DO
 	NUMBER_ONE (DTW)
@@ -1701,7 +1701,7 @@ DO
 }
 
 FORM (INTEGER_DTW_getFrameNumberFromTimeX, U"DTW: Get frame number from time (x)", nullptr) {
-	REALVAR (xTime, U"Time along x (s)", U"0.1")
+	REAL (xTime, U"Time along x (s)", U"0.1")
 	OK
 DO
 	INTEGER_ONE (DTW)
@@ -1726,7 +1726,7 @@ DIRECT (REAL_DTW_getTimeStepY) {
 
 
 FORM (REAL_DTW_getTimeFromFrameNumberY, U"DTW: Get time from frame number (y)", nullptr) {
-	NATURALVAR (frameNumber, U"Frame number (y)", U"1")
+	NATURAL (frameNumber, U"Frame number (y)", U"1")
 	OK
 DO
 	NUMBER_ONE (DTW)
@@ -1735,7 +1735,7 @@ DO
 }
 
 FORM (INTEGER_DTW_getFrameNumberFromTimeY, U"DTW: Get frame number from time (y)", nullptr) {
-	REALVAR (yTime, U"Time along y (s)", U"0.1")
+	REAL (yTime, U"Time along y (s)", U"0.1")
 	OK
 DO
 	INTEGER_ONE (DTW)
@@ -1747,7 +1747,7 @@ DO
 }
 
 FORM (REAL_DTW_getPathY, U"DTW: Get time along path", U"DTW: Get time along path...") {
-	REALVAR (xTime, U"Time (s)", U"0.0")
+	REAL (xTime, U"Time (s)", U"0.0")
 	OK
 DO
 	NUMBER_ONE (DTW)
@@ -1756,7 +1756,7 @@ DO
 }
 
 FORM (REAL_DTW_getYTimeFromXTime, U"DTW: Get y time from x time", U"DTW: Get y time from x time...") {
-	REALVAR (xTime, U"Time at x (s)", U"0.0")
+	REAL (xTime, U"Time at x (s)", U"0.0")
 	OK
 DO
 	NUMBER_ONE (DTW)
@@ -1765,7 +1765,7 @@ DO
 }
 
 FORM (REAL_DTW_getXTimeFromYTime, U"DTW: Get x time from y time", U"DTW: Get x time from y time...") {
-	REALVAR (yTime, U"Time at y (s)", U"0.0")
+	REAL (yTime, U"Time at y (s)", U"0.0")
 	OK
 DO
 	NUMBER_ONE (DTW)
@@ -1774,7 +1774,7 @@ DO
 }
 
 FORM (INTEGER_DTW_getMaximumConsecutiveSteps, U"DTW: Get maximum consecutive steps", U"DTW: Get maximum consecutive steps...") {
-	OPTIONMENUVAR (direction, U"Direction", 1)
+	OPTIONMENU (direction, U"Direction", 1)
 		OPTION (U"X")
 		OPTION (U"Y")
 		OPTION (U"Diagonaal")
@@ -1794,8 +1794,8 @@ DIRECT (REAL_DTW_getWeightedDistance) {
 }
 
 FORM (REAL_DTW_getDistanceValue, U"DTW: Get distance value", nullptr) {
-	REALVAR (xTime, U"Time at x (s)", U"0.1")
-	REALVAR (yTime, U"Time at y (s)", U"0.1")
+	REAL (xTime, U"Time at x (s)", U"0.1")
+	REAL (yTime, U"Time at y (s)", U"0.1")
 	OK
 DO
 	NUMBER_ONE (DTW)
@@ -1825,7 +1825,7 @@ DIRECT (REAL_DTW_getMaximumDistance) {
 FORM (MODIFY_DTW_formulaDistances, U"DTW: Formula (distances)", nullptr) {
 	LABEL (U"label", U"y := y1; for row := 1 to nrow do { x := x1; "
 		"for col := 1 to ncol do { self [row, col] := `formula' ; x := x + dx } y := y + dy }")
-	TEXTVAR (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	LOOP {
@@ -1848,9 +1848,9 @@ DO
 END }
 
 FORM (MODIFY_DTW_setDistanceValue, U"DTW: Set distance value", nullptr) {
-	REALVAR (xTime, U"Time at x (s)", U"0.1")
-	REALVAR (yTime, U"Time at y (s)", U"0.1")
-	REALVAR (newDistance, U"New value", U"0.0")
+	REAL (xTime, U"Time at x (s)", U"0.1")
+	REAL (yTime, U"Time at y (s)", U"0.1")
+	REAL (newDistance, U"New value", U"0.0")
 	OK
 DO
 	if (newDistance < 0) {
@@ -1879,8 +1879,8 @@ DO
 }
 
 FORM (MODIFY_DTW_findPath_bandAndSlope, U"DTW: find path (band & slope)", nullptr) {
-    REALVAR (sakoeChibaBand, U"Sakoe-Chiba band (s)", U"0.05")
-    RADIOVAR (slopeConstraint, U"Slope constraint", 1)
+    REAL (sakoeChibaBand, U"Sakoe-Chiba band (s)", U"0.05")
+    RADIO (slopeConstraint, U"Slope constraint", 1)
 		RADIOBUTTON (U"no restriction")
 		RADIOBUTTON (U"1/3 < slope < 3")
 		RADIOBUTTON (U"1/2 < slope < 2")
@@ -1893,8 +1893,8 @@ DO
 }
 
 FORM (NEW_DTW_to_Matrix_cumulativeDistances, U"DTW: To Matrix", nullptr) {
-    REALVAR (sakoeChibaBand, U"Sakoe-Chiba band (s)", U"0.05")
-    RADIOVAR (slopeConstraint, U"Slope constraint", 1)
+    REAL (sakoeChibaBand, U"Sakoe-Chiba band (s)", U"0.05")
+    RADIO (slopeConstraint, U"Slope constraint", 1)
 		RADIOBUTTON (U"no restriction")
 		RADIOBUTTON (U"1/3 < slope < 3")
 		RADIOBUTTON (U"1/2 < slope < 2")
@@ -1907,8 +1907,8 @@ DO
 }
 
 FORM (NEW_DTW_to_Polygon, U"DTW: To Polygon...", nullptr) {
-    REALVAR (sakoeChibaBand, U"Sakoe-Chiba band (s)", U"0.1")
-    RADIOVAR (slopeConstraint, U"Slope constraint", 1)
+    REAL (sakoeChibaBand, U"Sakoe-Chiba band (s)", U"0.1")
+    RADIO (slopeConstraint, U"Slope constraint", 1)
 		RADIOBUTTON (U"no restriction")
 		RADIOBUTTON (U"1/3 < slope < 3")
 		RADIOBUTTON (U"1/2 < slope < 2")
@@ -1969,9 +1969,9 @@ DIRECT (MODIFY_EditDistanceTable_setEditCosts) {
 }
 
 FORM (MODIFY_EditDistanceTable_setDefaultCosts, U"", nullptr) {
-	REALVAR (insertionCosts, U"Insertion costs", U"1.0")
-	REALVAR (deletionCosts, U"Deletion costs", U"1.0")
-	REALVAR (substitutionCosts, U"Substitution costs", U"2.0")
+	REAL (insertionCosts, U"Insertion costs", U"1.0")
+	REAL (deletionCosts, U"Deletion costs", U"1.0")
+	REAL (substitutionCosts, U"Substitution costs", U"2.0")
 	OK
 DO
 	if (insertionCosts < 0) {
@@ -1989,13 +1989,13 @@ DO
 }
 
 FORM (GRAPHICS_EditDistanceTable_draw, U"EditDistanceTable_draw", nullptr) {
-	RADIOVAR (format, U"Format", 3)
+	RADIO (format, U"Format", 3)
 		RADIOBUTTON (U"decimal")
 		RADIOBUTTON (U"exponential")
 		RADIOBUTTON (U"free")
 		RADIOBUTTON (U"rational")
-	NATURALVAR (precision, U"Precision", U"1")
-	REALVAR (angle, U"Rotate source labels by (degrees)", U"0.0")
+	NATURAL (precision, U"Precision", U"1")
+	REAL (angle, U"Rotate source labels by (degrees)", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (EditDistanceTable)
@@ -2014,7 +2014,7 @@ DIRECT (HELP_EditCostsTable_help) {
 }
 
 FORM (INTEGER_EditCostsTable_getTargetIndex, U"EditCostsTable: Get target index", nullptr) {
-	SENTENCEVAR (target, U"Target", U"")
+	SENTENCE (target, U"Target", U"")
 	OK
 DO
 	INTEGER_ONE (EditCostsTable)
@@ -2023,7 +2023,7 @@ DO
 }
 
 FORM (INTEGER_EditCostsTable_getSourceIndex, U"EditCostsTable: Get source index", nullptr) {
-	SENTENCEVAR (source, U"Source", U"")
+	SENTENCE (source, U"Source", U"")
 	OK
 DO
 	INTEGER_ONE (EditCostsTable)
@@ -2032,7 +2032,7 @@ DO
 }
 
 FORM (REAL_EditCostsTable_getInsertionCost, U"EditCostsTable: Get insertion cost", nullptr) {
-	SENTENCEVAR (target, U"Target", U"")
+	SENTENCE (target, U"Target", U"")
 	OK
 DO
 	NUMBER_ONE (EditCostsTable)
@@ -2041,7 +2041,7 @@ DO
 }
 
 FORM (REAL_EditCostsTable_getDeletionCost, U"EditCostsTable: Get deletion cost", nullptr) {
-	SENTENCEVAR (source, U"Source", U"")
+	SENTENCE (source, U"Source", U"")
 	OK
 DO
 	NUMBER_ONE (EditCostsTable)
@@ -2050,8 +2050,8 @@ DO
 }
 
 FORM (REAL_EditCostsTable_getSubstitutionCost, U"EditCostsTable: Get substitution cost", nullptr) {
-	SENTENCEVAR (target, U"Target", U"")
-	SENTENCEVAR (source, U"Source", U"")
+	SENTENCE (target, U"Target", U"")
+	SENTENCE (source, U"Source", U"")
 	OK
 DO
 	NUMBER_ONE (EditCostsTable)
@@ -2060,7 +2060,7 @@ DO
 }
 
 FORM (REAL_EditCostsTable_getOthersCost, U"EditCostsTable: Get cost (others)", nullptr) {
-	RADIOVAR (costTypes, U"Others cost type", 1)
+	RADIO (costTypes, U"Others cost type", 1)
 		RADIOBUTTON (U"Insertion")
 		RADIOBUTTON (U"Deletion")
 		RADIOBUTTON (U"Equality")
@@ -2073,8 +2073,8 @@ DO
 }
 
 FORM (MODIFY_EditCostsTable_setTargetSymbol_index, U"EditCostsTable: Set target symbol (index)", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
-	SENTENCEVAR (target, U"Target", U"a")
+	NATURAL (index, U"Index", U"1")
+	SENTENCE (target, U"Target", U"a")
 	OK
 DO
 	MODIFY_EACH (EditCostsTable)
@@ -2083,8 +2083,8 @@ DO
 }
 
 FORM (MODIFY_EditCostsTable_setSourceSymbol_index, U"EditCostsTable: Set source symbol (index)", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
-	SENTENCEVAR (source, U"Source", U"a")
+	NATURAL (index, U"Index", U"1")
+	SENTENCE (source, U"Source", U"a")
 	OK
 DO
 	MODIFY_EACH (EditCostsTable)
@@ -2093,8 +2093,8 @@ DO
 }
 
 FORM (MODIFY_EditCostsTable_setInsertionCosts, U"EditCostsTable: Set insertion costs", nullptr) {
-	SENTENCEVAR (targets, U"Targets", U"")
-	REALVAR (cost, U"Cost", U"2.0")
+	SENTENCE (targets, U"Targets", U"")
+	REAL (cost, U"Cost", U"2.0")
 	OK
 DO
 	MODIFY_EACH (EditCostsTable)
@@ -2103,8 +2103,8 @@ DO
 }
 
 FORM (MODIFY_EditCostsTable_setDeletionCosts, U"EditCostsTable: Set deletion costs", nullptr) {
-	SENTENCEVAR (sources, U"Sources", U"")
-	REALVAR (cost, U"Cost", U"2.0")
+	SENTENCE (sources, U"Sources", U"")
+	REAL (cost, U"Cost", U"2.0")
 	OK
 DO
 	MODIFY_EACH (EditCostsTable)
@@ -2113,9 +2113,9 @@ DO
 }
 
 FORM (MODIFY_EditCostsTable_setSubstitutionCosts, U"EditCostsTable: Set substitution costs", nullptr) {
-	SENTENCEVAR (targets, U"Targets", U"a i u")
-	SENTENCEVAR (sources, U"Sources", U"a i u")
-	REALVAR (cost, U"Cost", U"2.0")
+	SENTENCE (targets, U"Targets", U"a i u")
+	SENTENCE (sources, U"Sources", U"a i u")
+	REAL (cost, U"Cost", U"2.0")
 	OK
 DO
 	MODIFY_EACH (EditCostsTable)
@@ -2125,11 +2125,11 @@ DO
 
 FORM (MODIFY_EditCostsTable_setOthersCosts, U"EditCostsTable: Set costs (others)", nullptr) {
 	LABEL (U"", U"Others costs")
-	REALVAR (insertionCosts, U"Insertion", U"1.0")
-	REALVAR (deletionCosts, U"Deletion", U"1.0")
+	REAL (insertionCosts, U"Insertion", U"1.0")
+	REAL (deletionCosts, U"Deletion", U"1.0")
 	LABEL ( U"", U"Substitution costs")
-	REALVAR (equalityCosts, U"Equality", U"0.0")
-	REALVAR (inequalityCosts, U"Inequality", U"2.0")
+	REAL (equalityCosts, U"Equality", U"0.0")
+	REAL (inequalityCosts, U"Inequality", U"2.0")
 	OK
 DO
 	MODIFY_EACH (EditCostsTable)
@@ -2144,9 +2144,9 @@ DIRECT (NEW_EditCostsTable_to_TableOfReal) {
 }
 
 FORM (NEW_EditCostsTable_createEmpty, U"Create empty EditCostsTable", U"Create empty EditCostsTable...") {
-	SENTENCEVAR (name, U"Name", U"editCosts")
-	INTEGERVAR (numberOfTargetSymbols, U"Number of target symbols", U"0")
-	INTEGERVAR (numberOfSourceSymbols, U"Number of source symbols", U"0")
+	SENTENCE (name, U"Name", U"editCosts")
+	INTEGER (numberOfTargetSymbols, U"Number of target symbols", U"0")
+	INTEGER (numberOfSourceSymbols, U"Number of source symbols", U"0")
 	OK
 DO
 	CREATE_ONE
@@ -2170,15 +2170,15 @@ DIRECT (GRAPHICS_Eigen_drawEigenvalues_scree) {
 }
 
 FORM (GRAPHICS_Eigen_drawEigenvalues, U"Eigen: Draw eigenvalues", U"Eigen: Draw eigenvalues...") {
-	INTEGERVAR (fromEigenvalue, U"left Eigenvalue range", U"0")
-	INTEGERVAR (toEigenvalue, U"right Eigenvalue range", U"0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
-	BOOLEANVAR (fractionSummed, U"Fraction of eigenvalues summed", false)
-	BOOLEANVAR (cumulative, U"Cumulative", false)
-	POSITIVEVAR (markSize_mm, U"Mark size (mm)", U"1.0")
-	SENTENCEVAR (mark_string, U"Mark string (+xo.)", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (fromEigenvalue, U"left Eigenvalue range", U"0")
+	INTEGER (toEigenvalue, U"right Eigenvalue range", U"0")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
+	BOOLEAN (fractionSummed, U"Fraction of eigenvalues summed", false)
+	BOOLEAN (cumulative, U"Cumulative", false)
+	POSITIVE (markSize_mm, U"Mark size (mm)", U"1.0")
+	SENTENCE (mark_string, U"Mark string (+xo.)", U"+")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Eigen)
@@ -2187,16 +2187,16 @@ DO
 }
 
 FORM (GRAPHICS_Eigen_drawEigenvector, U"Eigen: Draw eigenvector", U"Eigen: Draw eigenvector...") {
-	INTEGERVAR (eigenvectorNumber, U"Eigenvector number", U"1")
-	BOOLEANVAR (loadings, U"Component loadings", false)
-	INTEGERVAR (fromElement, U"left Element range", U"0")
-	INTEGERVAR (toElement, U"right Element range", U"0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"-1.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"1.0")
-	POSITIVEVAR (markSize_mm, U"Mark size (mm)", U"1.0")
-	SENTENCEVAR (mark_string, U"Mark string (+xo.)", U"+")
-	BOOLEANVAR (connectPoints, U"Connect points", true)
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (eigenvectorNumber, U"Eigenvector number", U"1")
+	BOOLEAN (loadings, U"Component loadings", false)
+	INTEGER (fromElement, U"left Element range", U"0")
+	INTEGER (toElement, U"right Element range", U"0")
+	REAL (fromAmplitude, U"left Amplitude range", U"-1.0")
+	REAL (toAmplitude, U"right Amplitude range", U"1.0")
+	POSITIVE (markSize_mm, U"Mark size (mm)", U"1.0")
+	SENTENCE (mark_string, U"Mark string (+xo.)", U"+")
+	BOOLEAN (connectPoints, U"Connect points", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Eigen)
@@ -2217,7 +2217,7 @@ DIRECT (INTEGER_Eigen_getDimension) {
 }
 
 FORM (REAL_Eigen_getEigenvalue, U"Eigen: Get eigenvalue", U"Eigen: Get eigenvalue...") {
-	NATURALVAR (eigenvalueNumber, U"Eigenvalue number", U"1")
+	NATURAL (eigenvalueNumber, U"Eigenvalue number", U"1")
 	OK
 DO
 	NUMBER_ONE (Eigen)
@@ -2229,8 +2229,8 @@ DO
 }
 
 FORM (REAL_Eigen_getSumOfEigenvalues, U"Eigen:Get sum of eigenvalues", U"Eigen: Get sum of eigenvalues...") {
-	INTEGERVAR (fromEigenvalue, U"left Eigenvalue range",  U"0")
-	INTEGERVAR (toEigenvalue, U"right Eigenvalue range", U"0")
+	INTEGER (fromEigenvalue, U"left Eigenvalue range",  U"0")
+	INTEGER (toEigenvalue, U"right Eigenvalue range", U"0")
 	OK
 DO
 	NUMBER_ONE (Eigen)
@@ -2239,8 +2239,8 @@ DO
 }
 
 FORM (REAL_Eigen_getEigenvectorElement, U"Eigen: Get eigenvector element", U"Eigen: Get eigenvector element...") {
-	NATURALVAR (eigenvectorNumber, U"Eigenvector number", U"1")
-	NATURALVAR (elementNumber, U"Element number", U"1")
+	NATURAL (eigenvectorNumber, U"Eigenvector number", U"1")
+	NATURAL (elementNumber, U"Element number", U"1")
 	OK
 DO
 	NUMBER_ONE (Eigen)
@@ -2249,7 +2249,7 @@ DO
 }
 
 FORM (MODIFY_Eigen_invertEigenvector, U"Eigen: Invert eigenvector", nullptr) {
-	NATURALVAR (eigenvectorNumber, U"Eigenvector number", U"1")
+	NATURAL (eigenvectorNumber, U"Eigenvector number", U"1")
 	OK
 DO
 	MODIFY_EACH (Eigen)
@@ -2264,7 +2264,7 @@ DIRECT (MODIFY_Eigens_alignEigenvectors) {
 }
 
 FORM (NEW1_Eigen_and_Matrix_projectColumns, U"Eigen & Matrix: Project columns", U"Eigen & Matrix: Project...") {
-	INTEGERVAR (numberOfDimensions, U"Number of dimensions", U"0")
+	INTEGER (numberOfDimensions, U"Number of dimensions", U"0")
 	OK
 DO
 	CONVERT_TWO (Eigen, Matrix)
@@ -2297,7 +2297,7 @@ DIRECT (INTEGER_Index_getNumberOfClasses) {
 }
 
 FORM (INFO_StringsIndex_getClassLabelFromClassIndex, U"StringsIndex: Get class label", U"StringsIndex: Get class label...") {
-	NATURALVAR (index, U"Class index", U"1")
+	NATURAL (index, U"Class index", U"1")
 	OK
 DO
 	STRING_ONE (StringsIndex)
@@ -2306,7 +2306,7 @@ DO
 }
 
 FORM (INFO_StringsIndex_getItemLabelFromItemIndex, U"StringsIndex: Get item label", nullptr) {
-	NATURALVAR (itemIndex, U"Item index", U"1")
+	NATURAL (itemIndex, U"Item index", U"1")
 	OK
 DO
 	STRING_ONE (StringsIndex)
@@ -2315,7 +2315,7 @@ DO
 }
 
 FORM (INTEGER_Index_getClassIndexFromItemIndex, U"Index: Get item index", nullptr) {
-	NATURALVAR (itemIndex, U"Item index", U"1")
+	NATURAL (itemIndex, U"Item index", U"1")
 	OK
 DO
 	INTEGER_ONE (Index)
@@ -2324,7 +2324,7 @@ DO
 }
 
 FORM (INTEGER_StringsIndex_getClassIndexFromClassLabel, U"StringsIndex: Get class index from calss label", nullptr) {
-	WORDVAR (klasLabel, U"Class label", U"label")
+	WORD (klasLabel, U"Class label", U"label")
 	OK
 DO
 	INTEGER_ONE (StringsIndex)
@@ -2333,8 +2333,8 @@ DO
 }
 
 FORM (NEW_Index_extractPart, U"Index: Extract part", U"Index: Extract part...") {
-	INTEGERVAR (fromItem, U"left Item range", U"0")
-	INTEGERVAR (toItem, U"right Item range", U"0")
+	INTEGER (fromItem, U"left Item range", U"0")
+	INTEGER (toItem, U"right Item range", U"0")
 	OK
 DO
 	CONVERT_EACH (Index);
@@ -2343,7 +2343,7 @@ DO
 }
 
 FORM (NEW_Index_to_Permutation, U"Index: To Permutation", U"Index: To Permutation...") {
-	BOOLEANVAR (permuteWithinClasses, U"Permute within classes", true)
+	BOOLEAN (permuteWithinClasses, U"Permute within classes", true)
 	OK
 DO
 	CONVERT_EACH (Index);
@@ -2369,7 +2369,7 @@ DIRECT (NEW1_Excitations_to_ExcitationList) {
 
 FORM (MODIFY_ExcitationList_formula, U"ExcitationList: Formula", nullptr) {
 	LABEL (U"label", U"for all objects in ExcitationList do { for col := 1 to ncol do { self [col] := `formula' ; x := x + dx } }")
-	TEXTVAR (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH (ExcitationList)
@@ -2386,7 +2386,7 @@ DIRECT (MODIFY_ExcitationList_addItem) {
 }
 
 FORM (NEW_ExcitationList_extractItem, U"ExcitationList: Extract item", nullptr) {
-	NATURALVAR (itemIndex, U"Item index", U"1")
+	NATURAL (itemIndex, U"Item index", U"1")
 	OK
 DO
 	CONVERT_EACH (ExcitationList)
@@ -2402,11 +2402,11 @@ DIRECT (NEW1_ExcitationList_append) {
 }
 
 FORM (NEW_ExcitationList_to_PatternList, U"Excitations: To PatternList", nullptr) {
-	NATURAL (U"Join", U"1")
+	NATURAL (join, U"Join", U"1")
 	OK
 DO
 	CONVERT_EACH (ExcitationList)
-		autoPatternList result = ExcitationList_to_PatternList (me, GET_INTEGER (U"Join"));
+		autoPatternList result = ExcitationList_to_PatternList (me, join);
 	CONVERT_EACH_END (my name)
 }
 
@@ -2426,7 +2426,7 @@ FORM_READ (READ1_FileInMemory_create, U"Create file in memory", nullptr, true) {
 END }
 
 FORM (MODIFY_FileInMemory_setId, U"FileInMemory: Set id", nullptr) {
-	SENTENCEVAR (newId, U"New id", U"New id")
+	SENTENCE (newId, U"New id", U"New id")
 	OK
 DO
 	MODIFY_EACH (FileInMemory)
@@ -2435,8 +2435,8 @@ DO
 }
 
 FORM (INFO_FileInMemory_showAsCode, U"FileInMemory: Show as code", nullptr) {
-	WORDVAR (name, U"Name", U"example")
-	INTEGERVAR (numberOfByterPerLine, U"Number of bytes per line", U"20")
+	WORD (name, U"Name", U"example")
+	INTEGER (numberOfByterPerLine, U"Number of bytes per line", U"20")
 	OK
 DO
 	INFO_ONE (FileInMemory)
@@ -2449,10 +2449,10 @@ DO
 /************************* FileInMemorySet ***********************************/
 
 FORM (NEW_FileInMemorySet_createFromDirectoryContents, U"Create files in memory from directory contents", nullptr) {
-	SENTENCEVAR (name, U"Name", U"list")
+	SENTENCE (name, U"Name", U"list")
 	LABEL (U"", U"Directory:")
-	TEXTVAR (directory, U"Directory", U"/home/david/praat/src/espeak-work/espeak-1.46.13/espeak-data")
-	WORDVAR (fileGlobber, U"Only files that match pattern", U"*.txt")
+	TEXTFIELD (directory, U"Directory", U"/home/david/praat/src/espeak-work/espeak-1.46.13/espeak-data")
+	WORD (fileGlobber, U"Only files that match pattern", U"*.txt")
 	OK
 DO
 	CREATE_ONE
@@ -2461,7 +2461,7 @@ DO
 }
 
 FORM (NEW_FileInMemorySet_createCopyFromFileInMemorySet, U"", nullptr) {
-	OPTIONMENUVAR (whichFile, U"Espeakdata", 5)
+	OPTIONMENU (whichFile, U"Espeakdata", 5)
 		OPTION (U"phons")
 		OPTION (U"dicts")
 		OPTION (U"voices")
@@ -2503,26 +2503,26 @@ DO
 }
 
 FORM (INFO_FileInMemorySet_showAsCode, U"FileInMemorySet: Show as code", nullptr) {
-	WORDVAR (name, U"Name", U"example")
-	INTEGER (U"Number of bytes per line", U"20")
+	WORD (name, U"Name", U"example")
+	INTEGER (numberOfBytesPerLine, U"Number of bytes per line", U"20")
 	OK
 DO
 	INFO_ONE (FileInMemorySet)
 		MelderInfo_open ();
-		FileInMemorySet_showAsCode (me, name, GET_INTEGER (U"Number of bytes per line"));
+		FileInMemorySet_showAsCode (me, name, numberOfBytesPerLine);
 		MelderInfo_close ();
 	INFO_ONE_END
 }
 
 FORM (INFO_FileInMemorySet_showOneFileAsCode, U"FileInMemorySet: Show one file as code", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
-	WORDVAR (name, U"Name", U"example")
-	INTEGER (U"Number of bytes per line", U"20")
+	NATURAL (index, U"Index", U"1")
+	WORD (name, U"Name", U"example")
+	INTEGER (numberOfBytesPerLine, U"Number of bytes per line", U"20")
 	OK
 DO
 	INFO_ONE (FileInMemorySet)
 		MelderInfo_open ();
-		FileInMemorySet_showOneFileAsCode (me, index, name, GET_INTEGER (U"Number of bytes per line"));
+		FileInMemorySet_showOneFileAsCode (me, index, name, numberOfBytesPerLine);
 		MelderInfo_close ();
 	INFO_ONE_END
 }
@@ -2561,10 +2561,10 @@ DIRECT (NEW_FileInMemorySet_to_Strings_id) {
 
 FORM (GRAPHICS_FilterBank_drawFilters, U"FilterBank: Draw filters", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -2574,9 +2574,9 @@ DO
 
 FORM (GRAPHICS_FilterBank_drawOneContour, U"FilterBank: Draw one contour", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	REALVAR (height, U"Height (dB)", U"40.0")
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	REAL (height, U"Height (dB)", U"40.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -2586,10 +2586,10 @@ DO
 
 FORM (GRAPHICS_FilterBank_drawContours, U"FilterBank: Draw contours", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -2598,19 +2598,19 @@ DO
 }
 
 FORM (GRAPHICS_FilterBank_drawFrequencyScales, U"FilterBank: Draw frequency scales", U"FilterBank: Draw frequency scales...") {
-	RADIOVAR (xFrequencyScale, U"Horizontal frequency scale", 1)
+	RADIO (xFrequencyScale, U"Horizontal frequency scale", 1)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
 		RADIOBUTTON (U"mel")
-	REALVAR (xFromFrequency, U"left Horizontal frequency range", U"0.0")
-	REALVAR (xToFrequency, U"right Horizontal frequency range", U"0.0")
-	RADIOVAR (yFrequencyScale, U"Vertical frequency scale", 1)
+	REAL (xFromFrequency, U"left Horizontal frequency range", U"0.0")
+	REAL (xToFrequency, U"right Horizontal frequency range", U"0.0")
+	RADIO (yFrequencyScale, U"Vertical frequency scale", 1)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
 		RADIOBUTTON (U"mel")
-	REALVAR (yFromFrequency, U"left Vertical frequency range", U"0.0")
-	REALVAR (yToFrequency, U"right Vertical frequency range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (yFromFrequency, U"left Vertical frequency range", U"0.0")
+	REAL (yToFrequency, U"right Vertical frequency range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FilterBank)
@@ -2620,11 +2620,11 @@ DO
 
 FORM (GRAPHICS_MelSpectrogram_paintImage, U"MelSpectrogram: Paint image", U"MelSpectrogram: Paint image...") {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range (mel)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (mel)", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range (dB)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (mel)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (mel)", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range (dB)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (BandFilterSpectrogram)
@@ -2634,11 +2634,11 @@ DO
 
 FORM (GRAPHICS_BarkSpectrogram_paintImage, U"BarkSpectrogram: Paint image", U"BarkSpectrogram: Paint image...") {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range (bark)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (bark)", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range (dB)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (bark)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (bark)", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range (dB)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (BandFilterSpectrogram)
@@ -2648,10 +2648,10 @@ DO
 
 FORM (GRAPHICS_FilterBank_paintImage, U"FilterBank: Paint image", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -2661,10 +2661,10 @@ DO
 
 FORM (GRAPHICS_FilterBank_paintContours, U"FilterBank: Paint contours", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -2675,10 +2675,10 @@ DO
 
 FORM (GRAPHICS_FilterBank_paintCells, U"FilterBank: Paint cells", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -2688,10 +2688,10 @@ DO
 
 FORM (GRAPHICS_FilterBank_paintSurface, U"FilterBank: Paint surface", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -2700,8 +2700,8 @@ DO
 }
 
 FORM (REAL_FilterBank_getFrequencyInHertz, U"FilterBank: Get frequency in Hertz", U"FilterBank: Get frequency in Hertz...") {
-	REALVAR (frequency, U"Frequency", U"10.0")
-	RADIOVAR (frequencyUnit, U"Unit", 2)
+	REAL (frequency, U"Frequency", U"10.0")
+	RADIO (frequencyUnit, U"Unit", 2)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
 		RADIOBUTTON (U"mel")
@@ -2713,8 +2713,8 @@ DO
 }
 
 FORM (REAL_FilterBank_getFrequencyInBark, U"FilterBank: Get frequency in Bark", U"FilterBank: Get frequency in Bark...") {
-	REALVAR (frequency, U"Frequency", U"93.17")
-	RADIOVAR (frequencyUnit, U"Unit", 1)
+	REAL (frequency, U"Frequency", U"93.17")
+	RADIO (frequencyUnit, U"Unit", 1)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
 		RADIOBUTTON (U"mel")
@@ -2726,8 +2726,8 @@ DO
 }
 
 FORM (REAL_FilterBank_getFrequencyInMel, U"FilterBank: Get frequency in mel", U"FilterBank: Get frequency in mel...") {
-	REALVAR (frequency, U"Frequency", U"1000.0")
-	RADIOVAR (frequencyUnit, U"Unit", 1)
+	REAL (frequency, U"Frequency", U"1000.0")
+	RADIO (frequencyUnit, U"Unit", 1)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
 		RADIOBUTTON (U"mel")
@@ -2739,7 +2739,7 @@ DO
 }
 
 FORM (MODIFY_FilterBank_equalizeIntensities, U"FilterBank: Equalize intensities", nullptr) {
-	REALVAR (intensity_dB, U"Intensity (dB)", U"80.0")
+	REAL (intensity_dB, U"Intensity (dB)", U"80.0")
 	OK
 DO
 	MODIFY_EACH (FilterBank)
@@ -2748,7 +2748,7 @@ DO
 }
 
 FORM (MODIFY_BandFilterSpectrogram_equalizeIntensities, U"BandFilterSpectrogram: Equalize intensities", nullptr) {
-	REALVAR (intensity_dB, U"Intensity (dB)", U"80.0")
+	REAL (intensity_dB, U"Intensity (dB)", U"80.0")
 	OK
 DO
 	MODIFY_EACH (BandFilterSpectrogram)
@@ -2763,7 +2763,7 @@ DIRECT (NEW_FilterBank_to_Matrix) {
 }
 
 FORM (NEW_BandFilterSpectrogram_to_Matrix, U"BandFilterSpectrogram: To Matrix", nullptr) {
-	BOOLEANVAR (convertToDB, U"Convert to dB values", 1)
+	BOOLEAN (convertToDB, U"Convert to dB values", 1)
 	OK
 DO
 	CONVERT_EACH (BandFilterSpectrogram)
@@ -2772,50 +2772,42 @@ DO
 }
 
 FORM (NEW1_FilterBanks_crossCorrelate, U"FilterBanks: Cross-correlate", nullptr) {
-	RADIO_ENUM (U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
-	RADIO_ENUM (U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
+	RADIO_ENUM (amplitudeScaling, U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
+	RADIO_ENUM (signalOutsideTimeDomainIs, U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
 	OK
 DO
 	CONVERT_COUPLE (FilterBank)
-		autoSound result = FilterBanks_crossCorrelate (me, you,
-			GET_ENUM (kSounds_convolve_scaling, U"Amplitude scaling"),
-			GET_ENUM (kSounds_convolve_signalOutsideTimeDomain, U"Signal outside time domain is..."));
+		autoSound result = FilterBanks_crossCorrelate (me, you, amplitudeScaling, signalOutsideTimeDomainIs);
 	CONVERT_COUPLE_END (my name, U"_", your name)
 }
 
 FORM (NEW1_BandFilterSpectrograms_crossCorrelate, U"BandFilterSpectrograms: Cross-correlate", nullptr) {
-	RADIO_ENUM (U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
-	RADIO_ENUM (U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
+	RADIO_ENUM (amplitudeScaling, U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
+	RADIO_ENUM (signalOutsideTimeDomainIs, U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
 	OK
 DO
 	CONVERT_COUPLE (BandFilterSpectrogram)
-		autoSound result = BandFilterSpectrograms_crossCorrelate (me, you,
-			GET_ENUM (kSounds_convolve_scaling, U"Amplitude scaling"),
-			GET_ENUM (kSounds_convolve_signalOutsideTimeDomain, U"Signal outside time domain is..."));
+		autoSound result = BandFilterSpectrograms_crossCorrelate (me, you, amplitudeScaling, signalOutsideTimeDomainIs);
 	CONVERT_COUPLE_END (my name, U"_", your name)
 }
 
 FORM (NEW1_FilterBanks_convolve, U"FilterBanks: Convolve", nullptr) {
-	RADIO_ENUM (U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
-	RADIO_ENUM (U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
+	RADIO_ENUM (amplitudeScaling, U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
+	RADIO_ENUM (signalOutsideTimeDomainIs, U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
 	OK
 DO
 	CONVERT_COUPLE (FilterBank)
-		autoSound result = FilterBanks_convolve (me, you,
-			GET_ENUM (kSounds_convolve_scaling, U"Amplitude scaling"),
-			GET_ENUM (kSounds_convolve_signalOutsideTimeDomain, U"Signal outside time domain is..."));
+		autoSound result = FilterBanks_convolve (me, you, amplitudeScaling, signalOutsideTimeDomainIs);
 	CONVERT_COUPLE_END (my name, U"_", your name)
 }
 
 FORM (NEW1_BandFilterSpectrograms_convolve, U"BandFilterSpectrograms: Convolve", nullptr) {
-	RADIO_ENUM (U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
-	RADIO_ENUM (U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
+	RADIO_ENUM (amplitudeScaling, U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
+	RADIO_ENUM (signalOutsideTimeDomainIs, U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
 	OK
 DO
 	CONVERT_COUPLE (BandFilterSpectrogram)
-		autoSound result = BandFilterSpectrograms_convolve (me, you,
-			GET_ENUM (kSounds_convolve_scaling, U"Amplitude scaling"),
-			GET_ENUM (kSounds_convolve_signalOutsideTimeDomain, U"Signal outside time domain is..."));
+		autoSound result = BandFilterSpectrograms_convolve (me, you, amplitudeScaling, signalOutsideTimeDomainIs);
 	CONVERT_COUPLE_END (my name, U"_", your name)
 }
 
@@ -2838,19 +2830,19 @@ DIRECT (HELP_FormantFilter_help) {
 }
 
 FORM (GRAPHICS_FormantFilter_drawFilterFunctions, U"FormantFilter: Draw filter functions", U"FilterBank: Draw filter functions...") {
-	INTEGERVAR (fromFilter, U"left Filter range", U"0")
-	INTEGERVAR (toFilter, U"right Filter range", U"0")
-	POSITIVEVAR (bandwidth, U"Bandwidth (Hz)", U"100.0")
-	RADIOVAR (frequencyScale, U"Frequency scale", 1)
+	INTEGER (fromFilter, U"left Filter range", U"0")
+	INTEGER (toFilter, U"right Filter range", U"0")
+	POSITIVE (bandwidth, U"Bandwidth (Hz)", U"100.0")
+	RADIO (frequencyScale, U"Frequency scale", 1)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
 		RADIOBUTTON (U"mel")
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	BOOLEANVAR (dBScale, U"Amplitude scale in dB", 1)
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	BOOLEAN (dBScale, U"Amplitude scale in dB", 1)
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FormantFilter)
@@ -2859,12 +2851,12 @@ DO
 }
 
 FORM (GRAPHICS_FormantFilter_drawSpectrum, U"FormantFilter: Draw spectrum (slice)", U"FilterBank: Draw spectrum (slice)...") {
-	REALVAR (time, U"Time (s)", U"0.1")
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (Hz)", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range (dB)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (time, U"Time (s)", U"0.1")
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range (dB)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FilterBank)
@@ -2876,10 +2868,10 @@ DO
 
 FORM (GRAPHICS_old_FormantGrid_draw, U"FormantGrid: Draw", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (Hz)", U"0.0 (= auto)")
-	BOOLEANVAR (bandwidths, U"Bandwidths", false)
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"0.0 (= auto)")
+	BOOLEAN (bandwidths, U"Bandwidths", false)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FormantGrid)
@@ -2889,12 +2881,12 @@ DO
 
 FORM (GRAPHICS_FormantGrid_draw, U"FormantGrid: Draw", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (Hz)", U"0.0 (= auto)")
-	BOOLEANVAR (bandwidths, U"Bandwidths", false)
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"0.0 (= auto)")
+	BOOLEAN (bandwidths, U"Bandwidths", false)
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"")
-	OPTIONMENUSTRVAR (drawingMethod, U"Drawing method", 1)
+	OPTIONMENUSTR (drawingMethod, U"Drawing method", 1)
 		OPTION (U"lines")
 		OPTION (U"speckles")
 		OPTION (U"lines and speckles")
@@ -2908,12 +2900,12 @@ DO_ALTERNATIVE (GRAPHICS_old_FormantGrid_draw)
 /****************** FunctionTerms  *********************************/
 
 FORM (GRAPHICS_FunctionTerms_draw, U"FunctionTerms: Draw", nullptr) {
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (extrapolate, U"Extrapolate", false)
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (extrapolate, U"Extrapolate", false)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FunctionTerms)
@@ -2922,13 +2914,13 @@ DO
 }
 
 FORM (GRAPHICS_FunctionTerms_drawBasisFunction, U"FunctionTerms: Draw basis function", nullptr) {
-	NATURALVAR (index, U"Index", U"1")
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (extrapolate, U"Extrapolate", false)
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (index, U"Index", U"1")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (extrapolate, U"Extrapolate", false)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FunctionTerms)
@@ -2937,7 +2929,7 @@ DO
 }
 
 FORM (REAL_FunctionTerms_evaluate, U"FunctionTerms: Evaluate", nullptr) {
-	REALVAR (x, U"X", U"0.0")
+	REAL (x, U"X", U"0.0")
 	OK
 DO
 	NUMBER_ONE (FunctionTerms)
@@ -2953,7 +2945,7 @@ DIRECT (INTEGER_FunctionTerms_getNumberOfCoefficients) {
 
 FORM (REAL_FunctionTerms_getCoefficient, U"FunctionTerms: Get coefficient", nullptr) {
 	LABEL (U"", U"p(x) = c[1] + c[2] x + ... c[n+1] x^n")
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	NUMBER_ONE (FunctionTerms)
@@ -2969,8 +2961,8 @@ DIRECT (INTEGER_FunctionTerms_getDegree) {
 
 FORM (REAL_FunctionTerms_getMaximum, U"FunctionTerms: Get maximum", U"Polynomial: Get maximum...") {
 	LABEL (U"", U"Interval")
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0")
 	OK
 DO
 	NUMBER_ONE (FunctionTerms)
@@ -2980,8 +2972,8 @@ DO
 
 FORM (REAL_FunctionTerms_getMinimum, U"FunctionTerms: Get minimum", U"Polynomial: Get minimum...") {
 	LABEL (U"", U"Interval")
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0")
 	OK
 DO
 	NUMBER_ONE (FunctionTerms)
@@ -2991,8 +2983,8 @@ DO
 
 FORM (REAL_FunctionTerms_getXOfMaximum, U"FunctionTerms: Get x of maximum", U"Polynomial: Get x of maximum...") {
 	LABEL (U"", U"Interval")
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0")
 	OK
 DO
 	NUMBER_ONE (FunctionTerms)
@@ -3002,8 +2994,8 @@ DO
 
 FORM (REAL_FunctionTerms_getXOfMinimum, U"FunctionTerms: Get x of minimum", U"Polynomial: Get x of minimum...") {
 	LABEL (U"", U"Interval")
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0")
 	OK
 DO
 	NUMBER_ONE (FunctionTerms)
@@ -3014,8 +3006,8 @@ DO
 FORM (MODIFY_FunctionTerms_setCoefficient, U"FunctionTerms: Set coefficient", nullptr) {
 	LABEL (U"", U"p(x) = c[1]F[0] + c[2]F[1] + ... c[n+1]F[n]")
 	LABEL (U"", U"F[k] is of degree k")
-	NATURALVAR (index, U"Index", U"1")
-	REALVAR (value, U"Value", U"0.0")
+	NATURAL (index, U"Index", U"1")
+	REAL (value, U"Value", U"0.0")
 	OK
 DO
 	MODIFY_EACH (FunctionTerms)
@@ -3024,8 +3016,8 @@ DO
 }
 
 FORM (MODIFY_FunctionTerms_setDomain, U"FunctionTerms: Set domain", nullptr) {
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"2.0")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"2.0")
 	OK
 DO
 	MODIFY_EACH (FunctionTerms)
@@ -3039,11 +3031,11 @@ DO
 /***************** Intensity ***************************************************/
 
 FORM (NEW_Intensity_to_TextGrid_detectSilences, U"Intensity: To TextGrid (silences)", U"Intensity: To TextGrid (silences)...") {
-	REALVAR (silenceThreshold, U"Silence threshold (dB)", U"-25.0")
-	POSITIVEVAR (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
-	POSITIVEVAR (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.05")
-	WORDVAR (silenceLabel, U"Silent interval label", U"silent")
-	WORDVAR (soundingLabel, U"Sounding interval label", U"sounding")
+	REAL (silenceThreshold, U"Silence threshold (dB)", U"-25.0")
+	POSITIVE (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
+	POSITIVE (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.05")
+	WORD (silenceLabel, U"Silent interval label", U"silent")
+	WORD (soundingLabel, U"Sounding interval label", U"sounding")
 	OK
 DO
 	CONVERT_EACH (Intensity)
@@ -3054,12 +3046,12 @@ DO
 /***************** IntensityTier ***************************************************/
 
 FORM (NEW_IntensityTier_to_TextGrid_detectSilences, U"IntensityTier: To TextGrid (silences)", U"Intensity: To TextGrid (silences)...") {
-	REALVAR (silenceThreshold, U"Silence threshold (dB)", U"-25.0")
-	POSITIVEVAR (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
-	POSITIVEVAR (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.05")
-	WORDVAR (silenceLabel, U"Silent interval label", U"silent")
-	WORDVAR (soundingLabel, U"Sounding interval label", U"sounding")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.001")
+	REAL (silenceThreshold, U"Silence threshold (dB)", U"-25.0")
+	POSITIVE (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
+	POSITIVE (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.05")
+	WORD (silenceLabel, U"Silent interval label", U"silent")
+	WORD (soundingLabel, U"Sounding interval label", U"sounding")
+	POSITIVE (timeStep, U"Time step (s)", U"0.001")
 	OK
 DO
 	CONVERT_EACH (IntensityTier)
@@ -3068,7 +3060,7 @@ DO
 }
 
 FORM (NEW_IntensityTier_to_Intensity, U"", nullptr) {
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.001")
+	POSITIVE (timeStep, U"Time step (s)", U"0.001")
 	OK
 DO
 	CONVERT_EACH (IntensityTier)
@@ -3083,16 +3075,16 @@ DIRECT (HELP_ISpline_help) {
 }
 
 FORM (NEW1_ISpline_create, U"Create ISpline", U"Create ISpline...") {
-	WORDVAR (name, U"Name", U"ispline")
+	WORD (name, U"Name", U"ispline")
 	LABEL (U"", U"Domain")
-	REALVAR (xmin, U"Xmin", U"0")
-	REALVAR (xmax, U"Xmax", U"1")
+	REAL (xmin, U"Xmin", U"0")
+	REAL (xmax, U"Xmax", U"1")
 	LABEL (U"", U"ISpline(x) = c[1] I[1](x) + c[2] I[1](x) + ... c[n] I[n](x)")
 	LABEL (U"", U"all I[k] are polynomials of degree \"Degree\"")
 	LABEL (U"", U"Relation: numberOfCoefficients == numberOfInteriorKnots + degree")
-	INTEGERVAR (degree, U"Degree", U"3")
-	SENTENCEVAR (coefficients_string, U"Coefficients (c[k])", U"1.2 2.0 1.2 1.2 3.0 0.0")
-	SENTENCEVAR (knots_string, U"Interior knots" , U"0.3 0.5 0.6")
+	INTEGER (degree, U"Degree", U"3")
+	SENTENCE (coefficients_string, U"Coefficients (c[k])", U"1.2 2.0 1.2 1.2 3.0 0.0")
+	SENTENCE (knots_string, U"Interior knots" , U"0.3 0.5 0.6")
 	OK
 DO
 	CREATE_ONE
@@ -3116,17 +3108,17 @@ DIRECT (NEW1_KlattTable_createExample) {
 }
 
 FORM (NEW_KlattTable_to_Sound, U"KlattTable: To Sound", U"KlattTable: To Sound...") {
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"16000")
-	RADIOVAR (synthesisModel, U"Synthesis model", 1)
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"16000")
+	RADIO (synthesisModel, U"Synthesis model", 1)
 		RADIOBUTTON (U"Cascade")
 		RADIOBUTTON (U"Parallel")
-	NATURALVAR (numberOfFormants, U"Number of formants", U"5")
-	POSITIVEVAR (frameDuration, U"Frame duration (s)", U"0.005")
-	REALVAR (flutter_percentage, U"Flutter percentage (%)", U"0.0")   // ppgb: foutgevoelig
-	OPTIONMENUVAR (voicingSource, U"Voicing source", 1)
+	NATURAL (numberOfFormants, U"Number of formants", U"5")
+	POSITIVE (frameDuration, U"Frame duration (s)", U"0.005")
+	REAL (flutter_percentage, U"Flutter percentage (%)", U"0.0")   // ppgb: foutgevoelig
+	OPTIONMENU (voicingSource, U"Voicing source", 1)
 		OPTION (U"Impulsive")
 		OPTION (U"Natural")
-	OPTIONMENUVAR (soundOutputType, U"Output type", 1)
+	OPTIONMENU (soundOutputType, U"Output type", 1)
 		OPTION (U"Sound")
 		OPTION (U"Voicing")
 		OPTION (U"Aspiration")
@@ -3146,7 +3138,7 @@ DO
 }
 
 FORM (NEW_KlattTable_to_KlattGrid, U"KlattTable: To KlattGrid", nullptr) {
-	POSITIVEVAR (frameDuration, U"Frame duration (s)", U"0.002")
+	POSITIVE (frameDuration, U"Frame duration (s)", U"0.002")
 	OK
 DO
 	CONVERT_EACH (KlattTable)
@@ -3167,7 +3159,7 @@ DIRECT (NEW_Table_to_KlattTable) {
 }
 
 FORM (REAL_Table_getMedianAbsoluteDeviation, U"Table: Get median absolute deviation", U"Table: Get median absolute deviation...") {
-	SENTENCEVAR (columnLabel, U"Column label", U"")
+	SENTENCE (columnLabel, U"Column label", U"")
 	OK
 DO
 	NUMBER_ONE (Table)
@@ -3199,7 +3191,7 @@ static void print_means (Table me) {
 
 FORM (INTEGER_Table_getNumberOfRowsWhere, U"", nullptr) {
 	LABEL (U"", U"Count only rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"M\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"M\"")
 	OK
 DO
 	INTEGER_ONE (Table)
@@ -3208,11 +3200,11 @@ DO
 }
 
 FORM (INFO_Table_reportOneWayAnova, U"Table: Report one-way anova",  U"Table: Report one-way anova...") {
-	SENTENCEVAR (dataColumn_string, U"Column with data", U"F0")
-	SENTENCEVAR (factor_string, U"Factor", U"Vowel")
-	BOOLEANVAR (wantMeans, U"Table with means", false);
-	BOOLEANVAR (wantDifferencesBetweenMeans, U"Table with differences between means", false)
-	BOOLEANVAR (wantTukeyPostHoc, U"Table with Tukey's post-hoc HSD test", false)
+	SENTENCE (dataColumn_string, U"Column with data", U"F0")
+	SENTENCE (factor_string, U"Factor", U"Vowel")
+	BOOLEAN (wantMeans, U"Table with means", false);
+	BOOLEAN (wantDifferencesBetweenMeans, U"Table with differences between means", false)
+	BOOLEAN (wantTukeyPostHoc, U"Table with Tukey's post-hoc HSD test", false)
 	OK
 DO
 	INFO_ONE (Table)
@@ -3239,10 +3231,10 @@ DO
 }
 
 FORM (INFO_Table_reportTwoWayAnova, U"Table: Report two-way anova", U"Table: Report two-way anova...") {
-	SENTENCEVAR (dataColumn_string, U"Column with data", U"Data")
-	SENTENCEVAR (firstFactor_string, U"First factor", U"A")
-	SENTENCEVAR (secondFactor_string, U"Second factor", U"B")
-	BOOLEANVAR (wantMeans, U"Table with means", 0);
+	SENTENCE (dataColumn_string, U"Column with data", U"Data")
+	SENTENCE (firstFactor_string, U"First factor", U"A")
+	SENTENCE (secondFactor_string, U"Second factor", U"B")
+	BOOLEAN (wantMeans, U"Table with means", false);
 	OK
 DO
 	INFO_ONE (Table)
@@ -3266,8 +3258,8 @@ DO
 }
 
 FORM (INFO_Table_reportOneWayKruskalWallis, U"Table: Report one-way Kruskal-Wallis", U"Table: Report one-way Kruskal-Wallis...") {
-	SENTENCEVAR (dataColumn_string, U"Column with data", U"Data")
-	SENTENCEVAR (factor_string, U"Factor", U"Group")
+	SENTENCE (dataColumn_string, U"Column with data", U"Data")
+	SENTENCE (factor_string, U"Factor", U"Group")
 	OK
 DO
 	INFO_ONE (Table)
@@ -3287,7 +3279,7 @@ DO
 }
 
 FORM (NEW_Table_to_StringsIndex_column, U"Table: To StringsIndex (column)", nullptr) {
-	SENTENCEVAR (columnLabel, U"Column label", U"")
+	SENTENCE (columnLabel, U"Column label", U"")
 	OK
 DO
 	CONVERT_EACH (Table)
@@ -3299,13 +3291,13 @@ DO
 /******************* LegendreSeries *********************************/
 
 FORM (NEW1_LegendreSeries_create, U"Create LegendreSeries", U"Create LegendreSeries...") {
-	WORDVAR (name, U"Name", U"ls")
+	WORD (name, U"Name", U"ls")
 	LABEL (U"", U"Domain")
-	REALVAR (xmin, U"Xmin", U"-1")
-	REALVAR (xmax, U"Xmax", U"1")
+	REAL (xmin, U"Xmin", U"-1")
+	REAL (xmax, U"Xmax", U"1")
 	LABEL (U"", U"LegendreSeries(x) = c[1] P[0](x) + c[2] P[1](x) + ... c[n+1] P[n](x)")
 	LABEL (U"", U"P[k] is a Legendre polynomial of degree k")
-	SENTENCEVAR (coefficients_string, U"Coefficients", U"0 0 1.0")
+	SENTENCE (coefficients_string, U"Coefficients", U"0 0 1.0")
 	OK
 DO
 	REQUIRE  (xmin < xmax, U"Xmin must be smaller than Xmax.") 
@@ -3370,11 +3362,11 @@ FORM_SAVE (SAVE_LongSounds_writeToStereoNistFile, U"LongSound: Save as NIST file
 /******************* Matrix **************************************************/
 
 FORM (GRAPHICS_Matrix_drawAsSquares, U"Matrix: Draw as squares", U"Matrix: Draw as squares...") {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -3384,18 +3376,18 @@ DO
 
 FORM (GRAPHICS_Matrix_drawDistribution, U"Matrix: Draw distribution", U"Matrix: Draw distribution...") {
 	LABEL (U"", U"Selection of (part of) Matrix")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
 	LABEL (U"", U"Selection of Matrix values")
-	REALVAR (minimumValue, U"Minimum value", U"0.0")
-	REALVAR (maximumValue, U"Maximum value", U"0.0")
+	REAL (minimumValue, U"Minimum value", U"0.0")
+	REAL (maximumValue, U"Maximum value", U"0.0")
 	LABEL (U"", U"Display of the distribution")
-	NATURALVAR (numberOfBins, U"Number of bins", U"10")
-	REALVAR (minimumFrequency, U"Minimum frequency", U"0.0")
-	REALVAR (maximumFrequency, U"Maximum frequency", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (numberOfBins, U"Number of bins", U"10")
+	REAL (minimumFrequency, U"Minimum frequency", U"0.0")
+	REAL (maximumFrequency, U"Maximum frequency", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -3405,18 +3397,18 @@ DO
 
 FORM (GRAPHICS_Matrix_drawCumulativeDistribution, U"Matrix: Draw cumulative distribution", nullptr) {
 	LABEL (U"", U"Selection of (part of) Matrix")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
 	LABEL (U"", U"Selection of Matrix values")
-	REALVAR (minimumValue, U"Minimum value", U"0.0")
-	REALVAR (maximumValue, U"Maximum value", U"0.0")
+	REAL (minimumValue, U"Minimum value", U"0.0")
+	REAL (maximumValue, U"Maximum value", U"0.0")
 	LABEL (U"", U"Display of the distribution")
-	NATURALVAR (numberOfBins, U"Number of bins", U"10")
-	REALVAR (minimum, U"Minimum", U"0.0")
-	REALVAR (maximum, U"Maximum", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (numberOfBins, U"Number of bins", U"10")
+	REAL (minimum, U"Minimum", U"0.0")
+	REAL (maximum, U"Maximum", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -3425,10 +3417,10 @@ DO
 }
 
 FORM (REAL_Matrix_getMean, U"Matrix: Get mean", nullptr) {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
 	OK
 DO
 	NUMBER_ONE (Matrix)
@@ -3437,10 +3429,10 @@ DO
 }
 
 FORM (REAL_Matrix_getStandardDeviation, U"Matrix: Get standard deviation", nullptr) {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
 	OK
 DO
 	NUMBER_ONE (Matrix)
@@ -3450,7 +3442,7 @@ DO
 
 FORM (MODIFY_Matrix_scale, U"Matrix: Scale", nullptr) {
 	LABEL (U"", U"self[row, col] := self[row, col] / `Scale factor'")
-	RADIOVAR (scaleMethod, U"Scale factor", 1)
+	RADIO (scaleMethod, U"Scale factor", 1)
 		RADIOBUTTON (U"Extremum in matrix")
 		RADIOBUTTON (U"Extremum in each row")
 		RADIOBUTTON (U"Extremum in each column")
@@ -3480,7 +3472,7 @@ DIRECT (NEW_Matrix_to_PCA_byRows) {
 }
 
 FORM (NEW_Matrix_solveEquation, U"Matrix: Solve equation", U"Matrix: Solve equation...") {
-	REALVAR (tolerance, U"Tolerance", U"1.19e-7")
+	REAL (tolerance, U"Tolerance", U"1.19e-7")
 	OK
 DO
 	CONVERT_EACH (Matrix)
@@ -3501,15 +3493,15 @@ DIRECT (NEW1_ActivationList_Categories_to_TableOfReal) {
 }
 
 FORM (GRAPHICS_Matrix_scatterPlot, U"Matrix: Scatter plot", nullptr) {
-	NATURALVAR (xColumn, U"Column for X-axis", U"1")
-	NATURALVAR (yColumn, U"Column for Y-axis", U"2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	POSITIVEVAR (markSize_mm, U"Mark size (mm)", U"1.0")
-	SENTENCEVAR (mark_string, U"Mark string (+xo.)", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (xColumn, U"Column for X-axis", U"1")
+	NATURAL (yColumn, U"Column for Y-axis", U"2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	POSITIVE (markSize_mm, U"Mark size (mm)", U"1.0")
+	SENTENCE (mark_string, U"Mark string (+xo.)", U"+")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 
@@ -3526,7 +3518,7 @@ DIRECT (NEW_Matrix_to_ActivationList) {
 
 FORM (NEW1_Matrices_to_DTW, U"Matrices: To DTW", U"Matrix: To DTW...") {
 	LABEL (U"", U"Distance  between cepstral coefficients")
-	REALVAR (distanceMetric, U"Distance metric", U"2.0")
+	REAL (distanceMetric, U"Distance metric", U"2.0")
 	DTW_constraints_addCommonFields (matchStart, matchEnd, slopeConstraint)
 	OK
 DO
@@ -3536,7 +3528,7 @@ DO
 }
 
 FORM (NEW_Matrix_to_PatternList, U"Matrix: To PatternList", nullptr) {
-	NATURALVAR (join, U"Join", U"1")
+	NATURAL (join, U"Join", U"1")
 	OK
 DO
 	CONVERT_EACH (Matrix)
@@ -3571,7 +3563,7 @@ DIRECT (REAL_FilterBank_getFrequencyDistance) {
 }
 
 FORM (REAL_FilterBank_getXofColumn, U"Get time of column", nullptr) {
-	NATURALVAR (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	NUMBER_ONE (FilterBank)
@@ -3580,7 +3572,7 @@ DO
 }
 
 FORM (REAL_FilterBank_getFrequencyOfRow, U"Get frequency of row", nullptr) {
-	NATURALVAR (rowNumber, U"Row number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
 	OK
 DO
 	NUMBER_ONE (FilterBank)
@@ -3589,8 +3581,8 @@ DO
 }
 
 FORM (REAL_FilterBank_getValueInCell, U"Get value in cell", nullptr) {
-	REALVAR (time, U"Time (s)", U"0.5")
-	POSITIVEVAR (frequency, U"Frequency", U"1.0")
+	REAL (time, U"Time (s)", U"0.5")
+	POSITIVE (frequency, U"Frequency", U"1.0")
 	OK
 DO
 	NUMBER_ONE (FilterBank)
@@ -3642,7 +3634,7 @@ DIRECT (REAL_BandFilterSpectrogram_getFrequencyDistance) {
 }
 
 FORM (REAL_BandFilterSpectrogram_getFrequencyOfRow, U"Get frequency of row", nullptr) {
-	NATURALVAR (rowNumber, U"Row number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
 	OK
 DO
 	NUMBER_ONE (BandFilterSpectrogram)
@@ -3651,7 +3643,7 @@ DO
 }
 
 FORM (REAL_BandFilterSpectrogram_getXofColumn, U"Get time of column", nullptr) {
-	NATURALVAR (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	NUMBER_ONE (BandFilterSpectrogram)
@@ -3660,8 +3652,8 @@ DO
 }
 
 FORM (REAL_BandFilterSpectrogram_getValueInCell, U"Get value in cell", nullptr) {
-	REALVAR (time, U"Time (s)", U"0.5")
-	POSITIVEVAR (frequency, U"Frequency", U"1")
+	REAL (time, U"Time (s)", U"0.5")
+	POSITIVE (frequency, U"Frequency", U"1")
 	OK
 DO
 	NUMBER_ONE (BandFilterSpectrogram)
@@ -3697,18 +3689,18 @@ DIRECT (HELP_MelSpectrogram_help) {
 }
 
 FORM (GRAPHICS_MelFilter_drawFilterFunctions, U"MelFilter: Draw filter functions", U"FilterBank: Draw filter functions...") {
-	INTEGERVAR (fromFilter, U"left Filter range", U"0")
-	INTEGERVAR (toFilter, U"right Filter range", U"0")
-	RADIOVAR (frequencyScale, U"Frequency scale", 1)
+	INTEGER (fromFilter, U"left Filter range", U"0")
+	INTEGER (toFilter, U"right Filter range", U"0")
+	RADIO (frequencyScale, U"Frequency scale", 1)
 	RADIOBUTTON (U"Hertz")
 	RADIOBUTTON (U"Bark")
 	RADIOBUTTON (U"Mel")
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	BOOLEANVAR (dBScale, U"Amplitude scale in dB", 0)
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	BOOLEAN (dBScale, U"Amplitude scale in dB", false)
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (MelFilter)
@@ -3717,17 +3709,17 @@ DO
 }
 
 FORM (GRAPHICS_MelSpectrogram_drawTriangularFilterFunctions, U"MelSpectrogram: Draw triangulat filter functions", U"MelSpectrogram: Draw filter functions...") {
-	INTEGERVAR (fromFilter, U"left Filter range", U"0")
-	INTEGERVAR (toFilter, U"right Filter range", U"0")
-	RADIOVAR (frequencyScale, U"Frequency scale", 1)
+	INTEGER (fromFilter, U"left Filter range", U"0")
+	INTEGER (toFilter, U"right Filter range", U"0")
+	RADIO (frequencyScale, U"Frequency scale", 1)
 	RADIOBUTTON (U"Mel")
 	RADIOBUTTON (U"Hertz")
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range", U"0.0")
-	BOOLEANVAR (dBScale, U"Amplitude scale in dB", 0)
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right Frequency range", U"0.0")
+	BOOLEAN (dBScale, U"Amplitude scale in dB", false)
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (MelSpectrogram)
@@ -3736,12 +3728,12 @@ DO
 }
 
 FORM (GRAPHICS_MelFilter_drawSpectrum, U"MelFilter: Draw spectrum (slice)", U"FilterBank: Draw spectrum (slice)...") {
-	REALVAR (time, U"Time (s)", U"0.1")
-	REALVAR (fromFrequency, U"left Frequency range (mel)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (mel)", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range (dB)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (time, U"Time (s)", U"0.1")
+	REAL (fromFrequency, U"left Frequency range (mel)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (mel)", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range (dB)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FilterBank)
@@ -3750,12 +3742,12 @@ DO
 }
 
 FORM (GRAPHICS_MelSpectrogram_drawSpectrumAtNearestTimeSlice, U"MelSpectrogram: Draw spectrum at nearest time slice", U"BandFilterSpectrogram: Draw spectrum at nearest time slice...") {
-	REALVAR (time, U"Time (s)", U"0.1")
-	REALVAR (fromFrequency, U"left Frequency range (mel)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (mel)", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range (dB)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (time, U"Time (s)", U"0.1")
+	REAL (fromFrequency, U"left Frequency range (mel)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (mel)", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range (dB)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (MelSpectrogram)
@@ -3764,12 +3756,12 @@ DO
 }
 
 FORM (GRAPHICS_BarkSpectrogram_drawSpectrumAtNearestTimeSlice, U"BarkSpectrogram: Draw spectrum at nearest time slice", U"BandFilterSpectrogram: Draw spectrum at nearest time slice...") {
-	REALVAR (time, U"Time (s)", U"0.1")
-	REALVAR (fromFrequency, U"left Frequency range (bark)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (bark)", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range (dB)", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (time, U"Time (s)", U"0.1")
+	REAL (fromFrequency, U"left Frequency range (bark)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (bark)", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range (dB)", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range (dB)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (MelSpectrogram)
@@ -3779,11 +3771,11 @@ DO
 
 FORM (GRAPHICS_MelFilter_paint, U"FilterBank: Paint", nullptr) {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (fromFrequency, U"left Frequency range (mel)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (mel)", U"0.0")
-	REALVAR (fromAmplitude, U"left Amplitude range", U"0.0")
-	REALVAR (toAmplitude, U"right Amplitude range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", false)
+	REAL (fromFrequency, U"left Frequency range (mel)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (mel)", U"0.0")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", false)
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -3792,7 +3784,7 @@ DO
 }
 
 FORM (NEW_MelFilter_to_MFCC, U"MelFilter: To MFCC", U"MelSpectrogram: To MFCC...") {
-	NATURALVAR (numberOfCoefficients, U"Number of coefficients", U"12")
+	NATURAL (numberOfCoefficients, U"Number of coefficients", U"12")
 	OK
 DO
 	CONVERT_EACH (MelFilter)
@@ -3801,7 +3793,7 @@ DO
 }
 
 FORM (NEW_MelSpectrogram_to_MFCC, U"MelSpectrogram: To MFCC", U"MelSpectrogram: To MFCC...") {
-	NATURALVAR (numberOfCoefficients, U"Number of coefficients", U"12")
+	NATURAL (numberOfCoefficients, U"Number of coefficients", U"12")
 	OK
 DO
 	CONVERT_EACH (MelSpectrogram)
@@ -3813,12 +3805,12 @@ DO
 
 #include "UnicodeData.h"
 FORM (INFO_Ltas_reportSpectralTilt, U"Ltas: Report spectral tilt", nullptr) {
-	POSITIVEVAR (fromFrequency, U"left Frequency range (Hz)", U"100.0")
-	POSITIVEVAR (toFrequency, U"right Frequency range (Hz)", U"5000.0")
-	OPTIONMENUVAR (frequencyScale, U"Frequency scale", 1)
+	POSITIVE (fromFrequency, U"left Frequency range (Hz)", U"100.0")
+	POSITIVE (toFrequency, U"right Frequency range (Hz)", U"5000.0")
+	OPTIONMENU (frequencyScale, U"Frequency scale", 1)
 		OPTION (U"Linear")
 		OPTION (U"Logarithmic")
-	OPTIONMENUVAR (fitMethod, U"Fit method", 2)
+	OPTIONMENU (fitMethod, U"Fit method", 2)
 		OPTION (U"Least squares")
 		OPTION (U"Robust")
 	OK
@@ -3843,8 +3835,8 @@ DIRECT (HELP_MFCC_help) {
 }
 
 FORM (NEW_MFCC_to_MelFilter, U"MFCC: To MelFilter", nullptr) {
-	INTEGERVAR (fromCoefficient, U"From coefficient", U"0")
-	INTEGERVAR (toCoefficient, U"To coefficient", U"0")
+	INTEGER (fromCoefficient, U"From coefficient", U"0")
+	INTEGER (toCoefficient, U"To coefficient", U"0")
 	OK
 DO
 	CONVERT_EACH (MFCC)
@@ -3853,9 +3845,9 @@ DO
 }
 
 FORM (NEW_MFCC_to_MelSpectrogram, U"MFCC: MelSpectrogram", U"MFCC: To MelSpectrogram...") {
-	INTEGERVAR (fromCoefficient, U"From coefficient", U"0")
-	INTEGERVAR (toCoefficient, U"To coefficient", U"0")
-	BOOLEANVAR (includeConstant, U"Include constant term", true)
+	INTEGER (fromCoefficient, U"From coefficient", U"0")
+	INTEGER (toCoefficient, U"To coefficient", U"0")
+	BOOLEAN (includeConstant, U"Include constant term", true)
 	OK
 DO
 	CONVERT_EACH (MFCC)
@@ -3864,7 +3856,7 @@ DO
 }
 
 FORM (NEW_MFCC_to_TableOfReal, U"MFCC: To TableOfReal", U"MFCC: To TableOfReal...") {
-	BOOLEANVAR (includeEnergy, U"Include energy", false)
+	BOOLEAN (includeEnergy, U"Include energy", false)
 	OK
 DO
 	CONVERT_EACH (MFCC)
@@ -3873,8 +3865,8 @@ DO
 }
 
 FORM (NEW_MFCC_to_Matrix_features, U"MFCC: To Matrix (features)", nullptr) {
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.025")
-	BOOLEANVAR (includeEnergy, U"Include energy", false)
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
+	BOOLEAN (includeEnergy, U"Include energy", false)
 	OK
 DO
 	CONVERT_EACH (MFCC)
@@ -3883,26 +3875,22 @@ DO
 }
 
 FORM (NEW1_MFCCs_crossCorrelate, U"MFCC & MFCC: Cross-correlate", nullptr) {
-	RADIO_ENUM (U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
-	RADIO_ENUM (U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
+	RADIO_ENUM (amplitudeScaling, U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
+	RADIO_ENUM (signalOutsideTimeDomainIs, U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
 	OK
 DO
 	CONVERT_COUPLE (MFCC)
-		autoSound result = MFCCs_crossCorrelate (me, you,
-		GET_ENUM (kSounds_convolve_scaling, U"Amplitude scaling"),
-		GET_ENUM (kSounds_convolve_signalOutsideTimeDomain, U"Signal outside time domain is..."));
+		autoSound result = MFCCs_crossCorrelate (me, you, amplitudeScaling, signalOutsideTimeDomainIs);
 	CONVERT_COUPLE_END (my name, U"_",your name)
 }
 
 FORM (NEW1_MFCCs_convolve, U"MFCC & MFCC: Convolve", nullptr) {
-	RADIO_ENUM (U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
-	RADIO_ENUM (U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
+	RADIO_ENUM (amplitudeScaling, U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
+	RADIO_ENUM (signalOutsideTimeDomainIs, U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
 	OK
 DO
 	CONVERT_COUPLE (MFCC)
-		autoSound result = MFCCs_convolve (me, you,
-		GET_ENUM (kSounds_convolve_scaling, U"Amplitude scaling"),
-		GET_ENUM (kSounds_convolve_signalOutsideTimeDomain, U"Signal outside time domain is..."));
+		autoSound result = MFCCs_convolve (me, you, amplitudeScaling, signalOutsideTimeDomainIs);
 	CONVERT_COUPLE_END (my name, U"_",your name)
 }
 
@@ -3915,16 +3903,16 @@ DIRECT (NEW_MFCC_to_Sound) {
 /**************** MSpline *******************************************/
 
 FORM (NEW_MSpline_create, U"Create MSpline", U"Create MSpline...") {
-	WORDVAR (name, U"Name", U"mspline")
+	WORD (name, U"Name", U"mspline")
 	LABEL (U"", U"Domain")
-	REALVAR (xmin, U"Xmin", U"0")
-	REALVAR (xmax, U"Xmax", U"1")
+	REAL (xmin, U"Xmin", U"0")
+	REAL (xmax, U"Xmax", U"1")
 	LABEL (U"", U"MSpline(x) = c[1] M[1](x) + c[2] M[1](x) + ... c[n] M[n](x)")
 	LABEL (U"", U"all M[k] are polynomials of degree \"Degree\"")
 	LABEL (U"", U"Relation: numberOfCoefficients == numberOfInteriorKnots + degree + 1")
-	INTEGERVAR (degree, U"Degree", U"2")
-	SENTENCEVAR (coefficients_string, U"Coefficients (c[k])", U"1.2 2.0 1.2 1.2 3.0 0.0")
-	SENTENCEVAR (knots_string, U"Interior knots" , U"0.3 0.5 0.6")
+	INTEGER (degree, U"Degree", U"2")
+	SENTENCE (coefficients_string, U"Coefficients (c[k])", U"1.2 2.0 1.2 1.2 3.0 0.0")
+	SENTENCE (knots_string, U"Interior knots" , U"0.3 0.5 0.6")
 	OK
 DO
 	REQUIRE (xmin < xmax, U"Xmin must be smaller than Xmax.")
@@ -3946,12 +3934,12 @@ DIRECT (NEW1_PatternList_and_Categories_to_Discriminant) {
 }
 
 FORM (GRAPHICS_PatternList_draw, U"PatternList: Draw", nullptr) {
-	NATURALVAR (patternNumber, U"Pattern number", U"1")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (patternNumber, U"Pattern number", U"1")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (PatternList)
@@ -3972,8 +3960,8 @@ DIRECT (INTEGER_PatternList_getPatternSize) {
 }
 
 FORM (REAL_PatternList_getValue, U"", nullptr) {
-	NATURALVAR (patternNumber, U"Pattern number", U"1")
-	NATURALVAR (nodeNumber, U"Node number", U"2")
+	NATURAL (patternNumber, U"Pattern number", U"1")
+	NATURAL (nodeNumber, U"Node number", U"2")
 	OK
 DO
 	NUMBER_ONE (PatternList)
@@ -3985,7 +3973,7 @@ FORM (MODIFY_PatternList_formula, U"PatternList: Formula", nullptr) {
 	LABEL (U"label", U"        y := 1; for row := 1 to nrow do { x := 1; "
 		"for col := 1 to ncol do { self [row, col] := `formula' ; x := x + 1 } "
 		"y := y + 1 }}")
-	TEXTVAR (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH (PatternList)
@@ -3994,9 +3982,9 @@ DO
 }
 
 FORM (MODIFY_PatternList_setValue, U"PatternList: Set value", U"PatternList: Set value...") {
-	NATURALVAR (rowNumber, U"Row number", U"1")
-	NATURALVAR (columnNumber, U"Column number", U"1")
-	REALVAR (newValue, U"New value", U"0.0")
+	NATURAL (rowNumber, U"Row number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
+	REAL (newValue, U"New value", U"0.0")
 	OK
 DO
 	MODIFY_EACH (PatternList)
@@ -4037,8 +4025,8 @@ DIRECT (HINT_hint_PCA_and_Configuration_to_TableOfReal_reconstruct) {
 END }
 
 FORM (REAL_PCA_and_TableOfReal_getFractionVariance, U"PCA & TableOfReal: Get fraction variance", U"PCA & TableOfReal: Get fraction variance...") {
-	NATURALVAR (fromPrincipalComponent, U"left Principal component range", U"1")
-	NATURALVAR (toPrincipalComponent, U"right Principal component range", U"1")
+	NATURAL (fromPrincipalComponent, U"left Principal component range", U"1")
+	NATURAL (toPrincipalComponent, U"right Principal component range", U"1")
 	OK
 DO
 	NUMBER_TWO (PCA, TableOfReal)
@@ -4053,7 +4041,7 @@ DIRECT (NEW_PCA_and_Configuration_to_TableOfReal_reconstruct) {
 }
 
 FORM (NEW1_PCA_and_TableOfReal_to_TableOfReal_projectRows, U"PCA & TableOfReal: To TableOfReal (project rows)", U"PCA & TableOfReal: To Configuration...") {
-	INTEGERVAR (numberOfDimensions, U"Number of dimensions to keep", U"0 (= all)")
+	INTEGER (numberOfDimensions, U"Number of dimensions to keep", U"0 (= all)")
 	OK
 DO
 	REQUIRE (numberOfDimensions >= 0, U"Number of dimensions must be greater equal zero.")
@@ -4063,7 +4051,7 @@ DO
 }
 
 FORM (NEW1_PCA_and_TableOfReal_to_Configuration, U"PCA & TableOfReal: To Configuration", U"PCA & TableOfReal: To Configuration...") {
-	INTEGERVAR (numberOfDimensions, U"Number of dimensions", U"0 (= all)")
+	INTEGER (numberOfDimensions, U"Number of dimensions", U"0 (= all)")
 	OK
 DO
 	REQUIRE (numberOfDimensions >= 0, U"Number of dimensions must be greater equal zero.")
@@ -4073,7 +4061,7 @@ DO
 }
 
 FORM (NEW1_PCA_and_TableOfReal_to_TableOfReal_zscores, U"PCA & TableOfReal: To TableOfReal (z-scores)", U"PCA & TableOfReal: To TableOfReal (z-scores)...") {
-	INTEGERVAR (numberOfDimensions, U"Number of dimensions", U"0 (= all)")
+	INTEGER (numberOfDimensions, U"Number of dimensions", U"0 (= all)")
 	OK
 DO
 	REQUIRE (numberOfDimensions >= 0, U"Number of dimensions must be greater equal zero.")
@@ -4083,7 +4071,7 @@ DO
 }
 
 FORM (NEW1_PCA_and_Matrix_to_Matrix_projectRows, U"PCA & Matrix: To Matrix (project rows)", nullptr) {
-	INTEGERVAR (numberOfDimensions, U"Number of dimensions", U"0 (= all)")
+	INTEGER (numberOfDimensions, U"Number of dimensions", U"0 (= all)")
 	OK
 DO
 	REQUIRE (numberOfDimensions >= 0, U"Number of dimensions must be greater equal zero.")
@@ -4093,7 +4081,7 @@ DO
 }
 
 FORM (NEW1_PCA_and_Matrix_to_Matrix_projectColumns, U"PCA & Matrix: To Matrix (project columns)", nullptr) {
-	INTEGERVAR (numberOfDimensions, U"Number of dimensions", U"0 (= all)")
+	INTEGER (numberOfDimensions, U"Number of dimensions", U"0 (= all)")
 	OK
 DO
 	REQUIRE (numberOfDimensions >= 0, U"Number of dimensions must be greater equal zero.")
@@ -4103,7 +4091,7 @@ DO
 }
 
 FORM (REAL_PCA_getCentroidElement, U"PCA: Get centroid element...", nullptr) {
-	NATURALVAR (number, U"Number", U"1")
+	NATURAL (number, U"Number", U"1")
 	OK
 DO
 	NUMBER_ONE (PCA)
@@ -4113,9 +4101,9 @@ DO
 }
 
 FORM (REAL_PCA_getEqualityOfEigenvalues, U"PCA: Get equality of eigenvalues", U"PCA: Get equality of eigenvalues...") {
-	INTEGERVAR (fromEigenvalue, U"left Eigenvalue range", U"0")
-	INTEGERVAR (toEigenvalue, U"right Eigenvalue range", U"0")
-	BOOLEANVAR (conservativeTest, U"Conservative test", false)
+	INTEGER (fromEigenvalue, U"left Eigenvalue range", U"0")
+	INTEGER (toEigenvalue, U"right Eigenvalue range", U"0")
+	BOOLEAN (conservativeTest, U"Conservative test", false)
 	OK
 DO
 	NUMBER_ONE (PCA)
@@ -4126,7 +4114,7 @@ DO
 }
 
 FORM (INTEGER_PCA_getNumberOfComponentsVAF, U"PCA: Get number of components (VAF)", U"PCA: Get number of components (VAF)...") {
-	POSITIVEVAR (varianceFraction, U"Variance fraction (0-1)", U"0.95")
+	POSITIVE (varianceFraction, U"Variance fraction (0-1)", U"0.95")
 	OK
 DO
 	REQUIRE (varianceFraction >= 0.0 && varianceFraction <= 1.0, U"The variance fraction must be in interval (0-1).")
@@ -4136,8 +4124,8 @@ DO
 }
 
 FORM (REAL_PCA_getFractionVAF, U"PCA: Get fraction variance accounted for", U"PCA: Get fraction variance accounted for...") {
-	NATURALVAR (fromPrincipalComponent, U"left Principal component range", U"1")
-	NATURALVAR (toPrincipalComponent, U"right Principal component range", U"1")
+	NATURAL (fromPrincipalComponent, U"left Principal component range", U"1")
+	NATURAL (toPrincipalComponent, U"right Principal component range", U"1")
 	OK
 DO
 	REQUIRE (fromPrincipalComponent <= toPrincipalComponent, U"The second component must be greater than or equal to the first component.")
@@ -4147,7 +4135,7 @@ DO
 }
 
 FORM (MODIFY_PCA_invertEigenvector, U"PCA: Invert eigenvector", nullptr) {
-	NATURALVAR (eigenvectorNumber, U"Eigenvector number", U"1")
+	NATURAL (eigenvectorNumber, U"Eigenvector number", U"1")
 	OK
 DO
 	MODIFY_EACH (Eigen)
@@ -4156,10 +4144,10 @@ DO
 }
 
 FORM (NEW_PCA_extractEigenvector, U"PCA: Extract eigenvector", U"Eigen: Extract eigenvector...") {
-	NATURALVAR (eigenvectorNumber, U"Eigenvector number", U"1")
+	NATURAL (eigenvectorNumber, U"Eigenvector number", U"1")
 	LABEL (U"", U"Reshape as")
-	INTEGERVAR (numberOfRows, U"Number of rows", U"0")
-	INTEGERVAR (numberOfColumns, U"Number of columns", U"0")
+	INTEGER (numberOfRows, U"Number of rows", U"0")
+	INTEGER (numberOfColumns, U"Number of columns", U"0")
 	OK
 DO
 	REQUIRE (numberOfRows >= 0, U"Number of rows must be >= 0.")
@@ -4176,7 +4164,7 @@ DIRECT (NEW_PCA_extractEigen) {
 }
 
 FORM (NEW_PCA_to_TableOfReal_reconstruct1, U"PCA: To TableOfReal (reconstruct)", U"PCA: To TableOfReal (reconstruct 1)...") {
-	SENTENCEVAR (coefficients_string, U"Coefficients", U"1.0 1.0")
+	SENTENCE (coefficients_string, U"Coefficients", U"1.0 1.0")
 	OK
 DO
 	CONVERT_EACH (PCA)
@@ -4185,8 +4173,8 @@ DO
 }
 
 FORM (NEW1_PCAs_to_Procrustes, U"PCA & PCA: To Procrustes", U"PCA & PCA: To Procrustes...") {
-	NATURALVAR (fromEigenvector, U"left Eigenvector range", U"1")
-	NATURALVAR (toEigenvector, U"right Eigenvector range", U"2")
+	NATURAL (fromEigenvector, U"left Eigenvector range", U"1")
+	NATURAL (toEigenvector, U"right Eigenvector range", U"2")
 	OK
 DO
 	CONVERT_COUPLE (PCA)
@@ -4208,9 +4196,9 @@ DIRECT (HELP_Permutation_help) {
 }
 
 FORM (NEW_Permutation_create, U"Create Permutation", U"Create Permutation...") {
-	WORDVAR (name, U"Name", U"p")
-	NATURALVAR (numberOfElements, U"Number of elements", U"10")
-	BOOLEANVAR (identity, U"Identity Permutation", true)
+	WORD (name, U"Name", U"p")
+	NATURAL (numberOfElements, U"Number of elements", U"10")
+	BOOLEAN (identity, U"Identity Permutation", true)
 	OK
 DO
 	CREATE_ONE
@@ -4228,7 +4216,7 @@ DIRECT (INTEGER_Permutation_getNumberOfElements) {
 }
 
 FORM (INTEGER_Permutation_getValueAtIndex, U"Permutation: Get value", U"Permutation: Get value...") {
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	INTEGER_ONE (Permutation)
@@ -4237,7 +4225,7 @@ DO
 }
 
 FORM (INTEGER_Permutation_getIndexAtValue, U"Permutation: Get index", U"Permutation: Get index...") {
-	NATURALVAR (value, U"Value", U"1")
+	NATURAL (value, U"Value", U"1")
 	OK
 DO
 	INTEGER_ONE (Permutation)
@@ -4252,9 +4240,9 @@ DIRECT (MODIFY_Permutation_sort) {
 }
 
 FORM (MODIFY_Permutation_swapBlocks, U"Permutation: Swap blocks", U"Permutation: Swap blocks...") {
-	NATURALVAR (fromIndex, U"From index", U"1")
-	NATURALVAR (toIndex, U"To index", U"2")
-	NATURALVAR (blockSize, U"Block size", U"1")
+	NATURAL (fromIndex, U"From index", U"1")
+	NATURAL (toIndex, U"To index", U"2")
+	NATURAL (blockSize, U"Block size", U"1")
 	OK
 DO
 	MODIFY_EACH (Permutation)
@@ -4263,8 +4251,8 @@ DO
 }
 
 FORM (MODIFY_Permutation_swapPositions, U"Permutation: Swap positions", U"Permutation: Swap positions...") {
-	NATURALVAR (firstIndex, U"First index", U"1")
-	NATURALVAR (secondIndex, U"Second index", U"2")
+	NATURAL (firstIndex, U"First index", U"1")
+	NATURAL (secondIndex, U"Second index", U"2")
 	OK
 DO
 	LOOP {
@@ -4275,8 +4263,8 @@ DO
 END }
 
 FORM (MODIFY_Permutation_swapNumbers, U"Permutation: Swap numbers", U"Permutation: Swap numbers...") {
-	NATURALVAR (firstNumber, U"First number", U"1")
-	NATURALVAR (secondNumber, U"Second number", U"2")
+	NATURAL (firstNumber, U"First number", U"1")
+	NATURAL (secondNumber, U"Second number", U"2")
 	OK
 DO
 	MODIFY_EACH (Permutation)
@@ -4286,11 +4274,11 @@ DO
 
 FORM (MODIFY_Permutation_swapOneFromRange, U"Permutation: Swap one from range", U"Permutation: Swap one from range...") {
 	LABEL (U"", U"A randomly chosen element from ")
-	INTEGERVAR (fromIndex, U"left Index range", U"0")
-	INTEGERVAR (toIndex, U"right Index range", U"0")
+	INTEGER (fromIndex, U"left Index range", U"0")
+	INTEGER (toIndex, U"right Index range", U"0")
 	LABEL (U"", U"is swapped with the element at")
-	NATURALVAR (index, U"Index", U"1")
-	BOOLEANVAR (forbidSame, U"Forbid same", 1)
+	NATURAL (index, U"Index", U"1")
+	BOOLEAN (forbidSame, U"Forbid same", true)
 	OK
 DO
 	MODIFY_EACH (Permutation)
@@ -4299,8 +4287,8 @@ DO
 }
 
 FORM (NEW_Permutation_permuteRandomly, U"Permutation: Permute randomly", U"Permutation: Permute randomly...") {
-	INTEGERVAR (fromIndex, U"left Index range", U"0")
-	INTEGERVAR (toIndex, U"right Index range", U"0")
+	INTEGER (fromIndex, U"left Index range", U"0")
+	INTEGER (toIndex, U"right Index range", U"0")
 	OK
 DO
 	CONVERT_EACH (Permutation)
@@ -4309,9 +4297,9 @@ DO
 }
 
 FORM (NEW_Permutation_rotate, U"Permutation: Rotate", U"Permutation: Rotate...") {
-	INTEGERVAR (fromIndex, U"left Index range", U"0")
-	INTEGERVAR (toIndex, U"right Index range", U"0")
-	INTEGERVAR (step, U"Step size", U"1")
+	INTEGER (fromIndex, U"left Index range", U"0")
+	INTEGER (toIndex, U"right Index range", U"0")
+	INTEGER (step, U"Step size", U"1")
 	OK
 DO
 	CONVERT_EACH (Permutation)
@@ -4320,8 +4308,8 @@ DO
 }
 
 FORM (NEW_Permutation_reverse, U"Permutation: Reverse", U"Permutation: Reverse...") {
-	INTEGERVAR (fromIndex, U"left Index range", U"0")
-	INTEGERVAR (toIndex, U"right Index range", U"0")
+	INTEGER (fromIndex, U"left Index range", U"0")
+	INTEGER (toIndex, U"right Index range", U"0")
 	OK
 DO
 	CONVERT_EACH (Permutation)
@@ -4330,11 +4318,11 @@ DO
 }
 
 FORM (NEW_Permutation_permuteBlocksRandomly, U"Permutation: Permute blocks randomly", U"Permutation: Permute randomly (blocks)...") {
-	INTEGERVAR (fromIndex, U"left Index range", U"0")
-	INTEGERVAR (toIndex, U"right Index range", U"0")
-	NATURALVAR (blockSize, U"Block size", U"12")
-	BOOLEANVAR (permuteWithinBlocks, U"Permute within blocks", 1)
-	BOOLEANVAR (noDoublets, U"No doublets", 0)
+	INTEGER (fromIndex, U"left Index range", U"0")
+	INTEGER (toIndex, U"right Index range", U"0")
+	NATURAL (blockSize, U"Block size", U"12")
+	BOOLEAN (permuteWithinBlocks, U"Permute within blocks", true)
+	BOOLEAN (noDoublets, U"No doublets", false)
 	OK
 DO
 	CONVERT_EACH (Permutation)
@@ -4343,10 +4331,10 @@ DO
 }
 
 FORM (NEW_Permutation_interleave, U"Permutation: Interleave", U"Permutation: Interleave...") {
-	INTEGERVAR (fromIndex, U"left Index range", U"0")
-	INTEGERVAR (toIndex, U"right Index range", U"0")
-	NATURALVAR (blockSize, U"Block size", U"12")
-	INTEGERVAR (offset, U"Offset", U"0")
+	INTEGER (fromIndex, U"left Index range", U"0")
+	INTEGER (toIndex, U"right Index range", U"0")
+	NATURAL (blockSize, U"Block size", U"12")
+	INTEGER (offset, U"Offset", U"0")
 	OK
 DO
 	CONVERT_EACH (Permutation)
@@ -4379,8 +4367,8 @@ DIRECT (MODIFY_Permutations_previous) {
 }
 
 FORM (NEW1_Pitches_to_DTW, U"Pitches: To DTW", U"Pitches: To DTW...") {
-	REALVAR (vuvCosts, U"Voiced-unvoiced costs", U"24.0")
-	REALVAR (weight, U"Time costs weight", U"10.0")
+	REAL (vuvCosts, U"Voiced-unvoiced costs", U"24.0")
+	REAL (weight, U"Time costs weight", U"10.0")
 	DTW_constraints_addCommonFields (matchStart, matchEnd, slopeConstraint)
 	OK
 DO
@@ -4390,9 +4378,9 @@ DO
 }
 
 FORM (NEW_PitchTier_to_Pitch, U"PitchTier: To Pitch", U"PitchTier: To Pitch...") {
-	POSITIVEVAR (stepSize, U"Step size", U"0.02")
-	POSITIVEVAR (pitchFloor, U"Pitch floor (Hz)", U"60.0")
-	POSITIVEVAR (pitchCeiling, U"Pitch ceiling (Hz)", U"400.0")
+	POSITIVE (stepSize, U"Step size", U"0.02")
+	POSITIVE (pitchFloor, U"Pitch floor (Hz)", U"60.0")
+	POSITIVE (pitchCeiling, U"Pitch ceiling (Hz)", U"400.0")
 	OK
 DO
 	CONVERT_EACH (PitchTier)
@@ -4401,18 +4389,18 @@ DO
 }
 
 FORM (MODIFY_PitchTier_modifyInterval, U"PitchTier: Modify interval", U"PitchTier: Modify interval...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range", U"0.0 (= all)")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range", U"0.0 (= all)")
 	LABEL (U"", U"")
-	SENTENCEVAR (timesString, U"Relative times", U"0.0 0.5 1.0")
-	OPTIONMENUVAR (timeOffset, U"...are...", 1)
+	SENTENCE (timesString, U"Relative times", U"0.0 0.5 1.0")
+	OPTIONMENU (timeOffset, U"...are...", 1)
 		OPTION (U"fractions")
 		OPTION (U"percentages")
 		OPTION (U"independent")
 	LABEL (U"", U"...of the interval duration which will be added...")
 	LABEL (U"", U"...to the start time of the interval.")
-	SENTENCEVAR (pitches_string, U"The \"pitch\" values", U"100 200 100")
-	OPTIONMENUVAR (pitch_as, U"...are...", 1)
+	SENTENCE (pitches_string, U"The \"pitch\" values", U"100 200 100")
+	OPTIONMENU (pitch_as, U"...are...", 1)
 		OPTION (U"frequencies")
 		OPTION (U"fractions")
 		OPTION (U"percentages")
@@ -4421,7 +4409,7 @@ FORM (MODIFY_PitchTier_modifyInterval, U"PitchTier: Modify interval", U"PitchTie
 		OPTION (U"music notes")
 //		OPTION (U"semitones")
 	LABEL (U"", U"...to be added to the anchor value (if used)...")
-	OPTIONMENUVAR (pitch_is, U"...which is the...", 1)
+	OPTIONMENU (pitch_is, U"...which is the...", 1)
 		OPTION (U"not used")
 		OPTION (U"current")
 		OPTION (U"start")
@@ -4432,7 +4420,7 @@ FORM (MODIFY_PitchTier_modifyInterval, U"PitchTier: Modify interval", U"PitchTie
 		OPTION (U"minimum")
 	LABEL (U"", U"...frequency value in the interval.")
 	LABEL (U"", U"")
-	OPTIONMENUVAR (pitch_unit, U"Pitch frequency unit", 1)
+	OPTIONMENU (pitch_unit, U"Pitch frequency unit", 1)
 		OPTION (U"Hertz")
 
 	OK
@@ -4444,20 +4432,20 @@ DO
 
 
 FORM (MODIFY_PitchTier_modifyInterval_toneLevels, U"PitchTier: Modify interval (tone levels)", U"PitchTier: Modify interval (tone levels)...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range", U"0.0 (= all)")
-	REAL4 (fmin, U"left Pitch range (Hz)", U"80.0")
-	REAL4 (fmax, U"right Pitch range", U"200.0")
-	NATURAL4 (numberOfToneLevels, U"Number of tone levels", U"5")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range", U"0.0 (= all)")
+	REAL (fmin, U"left Pitch range (Hz)", U"80.0")
+	REAL (fmax, U"right Pitch range", U"200.0")
+	NATURAL (numberOfToneLevels, U"Number of tone levels", U"5")
 	LABEL (U"", U"")
-	SENTENCEVAR (times_string, U"Relative times", U"0.0 0.5 1.0")
-	OPTIONMENUVAR (time_offset, U"...are...", 1)
+	SENTENCE (times_string, U"Relative times", U"0.0 0.5 1.0")
+	OPTIONMENU (time_offset, U"...are...", 1)
 		OPTION (U"fractions")
 		OPTION (U"percentages")
 		OPTION (U"independent")
 	LABEL (U"", U"...of the interval duration which will be added...")
 	LABEL (U"", U"...to the start time of the interval.")
-	SENTENCEVAR (pitches_string, U"Tone levels", U"2.1 2.1 5.0")
+	SENTENCE (pitches_string, U"Tone levels", U"2.1 2.1 5.0")
 	OK
 DO
 	MODIFY_EACH (PitchTier)
@@ -4468,8 +4456,8 @@ DO
 /******************* Polygon & Categories *************************************/
 
 FORM (NEW1_Polygon_createSimple, U"Create simple Polygon", U"Create simple Polygon...") {
-	WORDVAR (name, U"Name", U"p")
-	SENTENCEVAR (vertices_string, U"Vertices as X-Y pairs", U"0.0 0.0  0.0 1.0  1.0 0.0")
+	WORD (name, U"Name", U"p")
+	SENTENCE (vertices_string, U"Vertices as X-Y pairs", U"0.0 0.0  0.0 1.0  1.0 0.0")
 	OK
 DO
 	CREATE_ONE
@@ -4478,12 +4466,12 @@ DO
 }
 
 FORM (NEW1_Polygon_createFromRandomPoints, U"Polygon: Create from random points", nullptr) {
-	WORDVAR (name, U"Name", U"p")
-	NATURALVAR (numberOfPoints, U"Number of points", U"10")
-	REALVAR (xmin, U"left X range", U"0.0")
-	REALVAR (xmax, U"right X range", U"1.0")
-	REALVAR (ymin, U"left Y range", U"0.0")
-	REALVAR (ymax, U"right Y range", U"1.0")
+	WORD (name, U"Name", U"p")
+	NATURAL (numberOfPoints, U"Number of points", U"10")
+	REAL (xmin, U"left X range", U"0.0")
+	REAL (xmax, U"right X range", U"1.0")
+	REAL (ymin, U"left Y range", U"0.0")
+	REAL (ymax, U"right Y range", U"1.0")
 	OK
 DO
 	CREATE_ONE
@@ -4498,7 +4486,7 @@ DIRECT (INTEGER_Polygon_getNumberOfPoints) {
 }
 
 FORM (REAL_Polygon_getPointX, U"Polygon: Get point (x)", nullptr) {
-	NATURALVAR (pointNumber, U"Point number", U"1")
+	NATURAL (pointNumber, U"Point number", U"1")
 	OK
 DO
 	NUMBER_ONE (Polygon)
@@ -4507,7 +4495,7 @@ DO
 }
 
 FORM (REAL_Polygon_getPointY, U"Polygon: Get point (y)", nullptr) {
-	NATURALVAR (pointNumber, U"Point number", U"1")
+	NATURAL (pointNumber, U"Point number", U"1")
 	OK
 DO
 	NUMBER_ONE (Polygon)
@@ -4517,9 +4505,9 @@ DO
 
 FORM (INFO_Polygon_getLocationOfPoint, U"Get location of point", U"Polygon: Get location of point...") {
 	LABEL (U"", U"Point is (I)n, (O)ut, (E)dge or (V)ertex?")
-	REALVAR (x, U"X", U"0.0")
-	REALVAR (y, U"Y", U"0.0")
-	REALVAR (eps, U"Precision", U"1.64e-15")
+	REAL (x, U"X", U"0.0")
+	REAL (y, U"Y", U"0.0")
+	REAL (eps, U"Precision", U"1.64e-15")
 	OK
 DO
 	REQUIRE (eps >= 0, U"The precision cannot be negative.")
@@ -4537,7 +4525,7 @@ DIRECT (REAL_Polygon_getAreaOfConvexHull) {
 }
 
 FORM (NEW_Polygon_circularPermutation, U"Polygon: Circular permutation", nullptr) {
-	INTEGERVAR (shift, U"Shift", U"1")
+	INTEGER (shift, U"Shift", U"1")
 	OK
 DO
 	CONVERT_EACH (Polygon)
@@ -4559,8 +4547,8 @@ DIRECT (NEW_Polygon_convexHull) {
 }
 
 FORM (MODIFY_Polygon_translate, U"Polygon: Translate", U"Polygon: Translate...") {
-	REALVAR (xDistance, U"X distance", U"0.0")
-	REALVAR (yDistance, U"Y distance", U"0.0")
+	REAL (xDistance, U"X distance", U"0.0")
+	REAL (yDistance, U"Y distance", U"0.0")
 	OK
 DO
 	MODIFY_EACH (Polygon)
@@ -4570,10 +4558,10 @@ DO
 
 FORM (MODIFY_Polygon_rotate, U"Polygon: Rotate", U"Polygon: Rotate...") {
 	LABEL (U"", U"Rotate counterclockwise over the")
-	REALVAR (angle_degrees, U"Angle (degrees)", U"0.0")
+	REAL (angle_degrees, U"Angle (degrees)", U"0.0")
 	LABEL (U"", U"With respect to the point")
-	REALVAR (x, U"X", U"0.0")
-	REALVAR (y, U"Y", U"0.0")
+	REAL (x, U"X", U"0.0")
+	REAL (y, U"Y", U"0.0")
 	OK
 DO
 	MODIFY_EACH (Polygon)
@@ -4582,8 +4570,8 @@ DO
 }
 
 FORM (MODIFY_Polygon_scale, U"Polygon: Scale polygon", nullptr) {
-	REALVAR (x, U"X", U"0.0")
-	REALVAR (y, U"Y", U"0.0")
+	REAL (x, U"X", U"0.0")
+	REAL (y, U"Y", U"0.0")
 	OK
 DO
 	MODIFY_EACH (Polygon)
@@ -4592,11 +4580,11 @@ DO
 }
 
 FORM (GRAPHICS_Polygon_Categories_draw, U"Polygon & Categories: Draw", nullptr) {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (Polygon, Categories)
@@ -4623,12 +4611,12 @@ DIRECT (HELP_Polynomial_help) {
 }
 
 FORM (NEW1_Polynomial_create, U"Create Polynomial from coefficients", U"Create Polynomial...") {
-	WORDVAR (name, U"Name", U"p")
+	WORD (name, U"Name", U"p")
 	LABEL (U"", U"Domain of polynomial")
-	REALVAR (xmin, U"Xmin", U"-3.0")
-	REALVAR (xmax, U"Xmax", U"4.0")
+	REAL (xmin, U"Xmin", U"-3.0")
+	REAL (xmax, U"Xmax", U"4.0")
 	LABEL (U"", U"p(x) = c[1] + c[2] x + ... c[n+1] x^n")
-	SENTENCEVAR (coefficients_string, U"Coefficients", U"2.0 -1.0 -2.0 1.0")
+	SENTENCE (coefficients_string, U"Coefficients", U"2.0 -1.0 -2.0 1.0")
 	OK
 DO
 	REQUIRE (xmin < xmax, U"Xmin must be smaller than Xmax.")
@@ -4638,12 +4626,12 @@ DO
 }
 
 FORM (NEW1_Polynomial_createFromProducts, U"Create Polynomial from second order products", nullptr) {
-	WORDVAR (name, U"Name", U"p")
+	WORD (name, U"Name", U"p")
 	LABEL (U"", U"Domain of polynomial")
-	REALVAR (xmin, U"Xmin", U"-2.0")
-	REALVAR (xmax, U"Xmax", U"2.0")
+	REAL (xmin, U"Xmin", U"-2.0")
+	REAL (xmax, U"Xmax", U"2.0")
 	LABEL (U"", U"(1+a[1]*x+x^2)*(1+a[2]*x+x^2)*...*(1+a[n]*x+x^2)")
-	SENTENCEVAR (coefficients_string, U"The a's", U"1.0 2.0")
+	SENTENCE (coefficients_string, U"The a's", U"1.0 2.0")
 	OK
 DO
 	REQUIRE (xmin < xmax, U"Xmin must be smaller than Xmax.")
@@ -4653,12 +4641,12 @@ DO
 }
 
 FORM (NEW1_Polynomial_createFromZeros, U"Create Polynomial from first order products", nullptr) {
-	WORDVAR (name, U"Name", U"p")
+	WORD (name, U"Name", U"p")
 	LABEL (U"", U"Domain of polynomial")
-	REALVAR (xmin, U"Xmin", U"-3.0")
-	REALVAR (xmax, U"Xmax", U"3.0")
+	REAL (xmin, U"Xmin", U"-3.0")
+	REAL (xmax, U"Xmax", U"3.0")
 	LABEL (U"", U"(P(x) = (x-zero[1])*(1-zero[2])*...*(x-zero[n])")
-	SENTENCEVAR (zeros_string, U"The zero's", U"1.0 2.0")
+	SENTENCE (zeros_string, U"The zero's", U"1.0 2.0")
 	OK
 DO
 	REQUIRE (xmin < xmax, U"Xmin must be smaller than Xmax.")
@@ -4669,7 +4657,7 @@ DO
 
 FORM (MODIFY_Polynomial_divide_secondOrderFactor, U"Polynomial: Divide second order factor", nullptr) {
 	LABEL (U"", U"P(x) / (x^2 - factor)")
-	REALVAR (factor, U"Factor", U"1.0")
+	REAL (factor, U"Factor", U"1.0")
 	OK
 DO
 	MODIFY_EACH (Polynomial)
@@ -4679,8 +4667,8 @@ DO
 
 FORM (REAL_Polynomial_getArea, U"Polynomial: Get area", U"Polynomial: Get area...") {
 	LABEL (U"", U"Interval")
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0")
 	OK
 DO
 	NUMBER_ONE (Polynomial)
@@ -4690,7 +4678,7 @@ DO
 
 FORM (REAL_Polynomial_getRemainderAfterDivision, U"Polynomial: Get remainder after division", nullptr) {
 	LABEL (U"", U"P(x) / (x - factor)")
-	REALVAR (factor, U"Monomial factor", U"1.0")
+	REAL (factor, U"Monomial factor", U"1.0")
 	OK
 DO
 	NUMBER_ONE (Polynomial)
@@ -4701,8 +4689,8 @@ DO
 }
 
 FORM (INFO_Polynomial_getDerivativesAtX, U"Polynomial: Get derivatives at X", nullptr) {
-	REALVAR (x, U"X", U"0.5")
-	INTEGERVAR (numberOfDerivatives, U"Number of derivatives", U"2")
+	REAL (x, U"X", U"0.5")
+	INTEGER (numberOfDerivatives, U"Number of derivatives", U"2")
 	OK
 DO
 	autoNUMvector <double> derivatives ((integer) 0, numberOfDerivatives);
@@ -4718,8 +4706,8 @@ DO
 
 FORM (REAL_Polynomial_getOneRealRoot, U"Polynomial: Get one real root", nullptr) {
 	LABEL (U"", U"Interval: ")
-	REALVAR (xmin, U"left X Range", U"-1.0")
-	REALVAR (xmax, U"right X Range", U"1.0")
+	REAL (xmin, U"left X Range", U"-1.0")
+	REAL (xmax, U"right X Range", U"1.0")
 	OK
 DO
 	NUMBER_ONE (Polynomial)
@@ -4734,7 +4722,7 @@ DIRECT (NEW_Polynomial_getDerivative) {
 }
 
 FORM (NEW_Polynomial_getPrimitive, U"Polynomial: Get primitive", nullptr) {
-	REALVAR (constant, U"Constant", U"0.0")
+	REAL (constant, U"Constant", U"0.0")
 	OK
 DO
 	CONVERT_EACH (Polynomial)
@@ -4744,8 +4732,8 @@ DO
 
 FORM (NEW_Polynomial_scaleX, U"Polynomial: Scale x", U"Polynomial: Scale x...") {
 	LABEL (U"", U"New domain")
-	REALVAR (xmin, U"Xmin", U"-1.0")
-	REALVAR (xmax, U"Xmax", U"1.0")
+	REAL (xmin, U"Xmin", U"-1.0")
+	REAL (xmax, U"Xmax", U"1.0")
 	OK
 DO
 	REQUIRE (xmin < xmax, U"Xmin must be smaller than Xmax.")
@@ -4767,8 +4755,8 @@ DIRECT (NEW_Polynomial_to_Roots) {
 }
 
 FORM (INFO_Polynomial_evaluate_z, U"Polynomial: Get value (complex)", U"Polynomial: Get value (complex)...") {
-	REALVAR (x, U"Real part", U"0.0")
-	REALVAR (y, U"Imaginary part", U"0.0")
+	REAL (x, U"Real part", U"0.0")
+	REAL (y, U"Imaginary part", U"0.0")
 	OK
 DO
 	dcomplex z { x, y };
@@ -4781,8 +4769,8 @@ DO
 }
 
 FORM (NEW_Polynomial_to_Spectrum, U"Polynomial: To Spectrum", U"Polynomial: To Spectrum...") {
-	POSITIVEVAR (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
-	NATURALVAR (numberOfFrequencies, U"Number of frequencies (>1)", U"1025")
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
+	NATURAL (numberOfFrequencies, U"Number of frequencies (>1)", U"1025")
 	OK
 DO
 	CONVERT_EACH (Polynomial)
@@ -4797,8 +4785,8 @@ DIRECT (NEW_Polynomials_multiply) {
 }
 
 FORM (NEWMANY_Polynomials_divide, U"Polynomials: Divide", U"Polynomials: Divide...") {
-	BOOLEANVAR (wantQuotient, U"Want quotient", true)
-	BOOLEANVAR (wantRemainder, U"Want remainder", true)
+	BOOLEAN (wantQuotient, U"Want quotient", true)
+	BOOLEAN (wantRemainder, U"Want remainder", true)
 	OK
 DO
 	/* With gcc (GCC) 3.2.2 20030217 (Red Hat Linux 8.0 3.2.2-2)
@@ -4826,13 +4814,13 @@ DIRECT (HELP_Roots_help) {
 }
 
 FORM (GRAPHICS_Roots_draw, U"Roots: Draw", nullptr) {
-	REALVAR (xmin, U"Minimum of real axis", U"0.0")
-	REALVAR (xmax, U"Maximum of real axis", U"0.0")
-	REALVAR (ymin, U"Minimum of imaginary axis", U"0.0")
-	REALVAR (ymax, U"Maximum of imaginary axis", U"0.0")
-	SENTENCEVAR (mark_string, U"Mark string (+x0...)", U"o")
-	NATURALVAR (markSize, U"Mark size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", false)
+	REAL (xmin, U"Minimum of real axis", U"0.0")
+	REAL (xmax, U"Maximum of real axis", U"0.0")
+	REAL (ymin, U"Minimum of imaginary axis", U"0.0")
+	REAL (ymax, U"Maximum of imaginary axis", U"0.0")
+	SENTENCE (mark_string, U"Mark string (+x0...)", U"o")
+	NATURAL (markSize, U"Mark size", U"12")
+	BOOLEAN (garnish, U"Garnish", false)
 	OK
 DO
 	GRAPHICS_EACH (Roots)
@@ -4847,7 +4835,7 @@ DIRECT (INTEGER_Roots_getNumberOfRoots) {
 }
 
 FORM (COMPLEX_Roots_getRoot, U"Roots: Get root", nullptr) {
-	NATURALVAR (rootNumber, U"Root number", U"1")
+	NATURAL (rootNumber, U"Root number", U"1")
 	OK
 DO
 	INFO_ONE (Roots)
@@ -4859,7 +4847,7 @@ DO
 }
 
 FORM (REAL_Roots_getRealPartOfRoot, U"Roots: Get real part", nullptr) {
-	NATURALVAR (rootNumber, U"Root number", U"1")
+	NATURAL (rootNumber, U"Root number", U"1")
 	OK
 DO
 	NUMBER_ONE (Roots)
@@ -4869,7 +4857,7 @@ DO
 }
 
 FORM (REAL_Roots_getImaginaryPartOfRoot, U"Roots: Get imaginary part", nullptr) {
-	NATURALVAR (rootNumber, U"Root number", U"1")
+	NATURAL (rootNumber, U"Root number", U"1")
 	OK
 DO
 	NUMBER_ONE (Roots)
@@ -4879,9 +4867,9 @@ DO
 }
 
 FORM (MODIFY_Roots_setRoot, U"Roots: Set root", nullptr) {
-	NATURALVAR (rootNumber, U"Root number", U"1")
-	REALVAR (x, U"Real part", U"1.0/sqrt(2)")
-	REALVAR (y, U"Imaginary part", U"1.0/sqrt(2)")
+	NATURAL (rootNumber, U"Root number", U"1")
+	REAL (x, U"Real part", U"1.0/sqrt(2)")
+	REAL (y, U"Imaginary part", U"1.0/sqrt(2)")
 	OK
 DO
 	MODIFY_EACH (Roots)
@@ -4890,8 +4878,8 @@ DO
 }
 
 FORM (NEW_Roots_to_Spectrum, U"Roots: To Spectrum", U"Roots: To Spectrum...") {
-	POSITIVEVAR (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
-	NATURALVAR (numberOfFrequencies, U"Number of frequencies (>1)", U"1025")
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
+	NATURAL (numberOfFrequencies, U"Number of frequencies (>1)", U"1025")
 	OK
 DO
 	CONVERT_EACH (Roots)
@@ -4929,10 +4917,10 @@ DIRECT (INFO_Praat_ReportFloatingPointProperties) {
 END }
 
 FORM (REAL_Praat_getTukeyQ, U"Get TukeyQ", nullptr) {
-	POSITIVEVAR (criticalValue, U"Critical value", U"2.0")
-	NATURALVAR (numberOfMeans, U"Number of means", U"3")
-	POSITIVEVAR (degreesOfFreedon, U"Degrees of freedom", U"10.0")
-	NATURALVAR (numberOfRows, U"Number of rows", U"1")
+	POSITIVE (criticalValue, U"Critical value", U"2.0")
+	NATURAL (numberOfMeans, U"Number of means", U"3")
+	POSITIVE (degreesOfFreedon, U"Degrees of freedom", U"10.0")
+	NATURAL (numberOfRows, U"Number of rows", U"1")
 	OK
 DO
 	double result = NUMtukeyQ (criticalValue, numberOfMeans, degreesOfFreedon, numberOfRows);
@@ -4940,10 +4928,10 @@ DO
 END }
 
 FORM (REAL_Praat_getInvTukeyQ, U"Get invTukeyQ", nullptr) {
-	REALVAR (probability, U"Probability", U"0.05")
-	NATURALVAR (numberOfMeans, U"Number of means", U"3")
-	POSITIVEVAR (degreesOfFreedon, U"Degrees of freedom", U"10.0")
-	NATURALVAR (numberOfRows, U"Number of rows", U"1")
+	REAL (probability, U"Probability", U"0.05")
+	NATURAL (numberOfMeans, U"Number of means", U"3")
+	POSITIVE (degreesOfFreedon, U"Degrees of freedom", U"10.0")
+	NATURAL (numberOfRows, U"Number of rows", U"1")
 	OK
 DO
 	REQUIRE (probability >= 0.0 && probability <= 1.0, U"The probability should be in the interval [0, 1].")
@@ -4952,10 +4940,10 @@ DO
 END }
 
 FORM (COMPLEX_Praat_getIncompleteGamma, U"Get incomplete gamma", U"Get incomplete gamma...") {
-	POSITIVEVAR (reAlpha, U"Real part of alpha", U"4.0")
-	REALVAR (imAlpha, U"Imaginary part of alpha", U"0.0")
-	REALVAR (reX, U"Real part of X", U"4.0")
-	REALVAR (imX, U"Imaginary part of X", U"0.0")
+	POSITIVE (reAlpha, U"Real part of alpha", U"4.0")
+	REAL (imAlpha, U"Imaginary part of alpha", U"0.0")
+	REAL (reX, U"Real part of X", U"4.0")
+	REAL (imX, U"Imaginary part of X", U"0.0")
 	OK
 DO
 	double result_re, result_im;
@@ -4966,9 +4954,9 @@ END }
 /******************** Sound ****************************************/
 
 #define Sound_create_addCommonFields(startTime,endTime,samplingFrequency) \
-	REALVAR (startTime, U"Start time (s)", U"0.0") \
-	REALVAR (endTime, U"End time (s)", U"1.0") \
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	REAL (startTime, U"Start time (s)", U"0.0") \
+	REAL (endTime, U"End time (s)", U"1.0") \
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
 
 
 static void Sound_create_checkCommonFields (double startTime, double endTime, double samplingFrequency) {
@@ -5004,13 +4992,13 @@ static void Sound_create_checkCommonFields (double startTime, double endTime, do
 }
 
 FORM (NEW1_Sound_and_Pitch_to_FormantFilter, U"Sound & Pitch: To FormantFilter", U"Sound & Pitch: To Spectrogram...") {
-	POSITIVEVAR (windowLength, U"Analysis window duration (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
+	POSITIVE (windowLength, U"Analysis window duration (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
 	LABEL (U"", U"Filter bank parameters")
-	POSITIVEVAR (firstFrequency, U"Position of first filter (Hz)", U"100.0")
-	POSITIVEVAR (deltaFrequency, U"Distance between filters (Hz)", U"50.0")
-	REALVAR (maximumFrequency, U"Maximum frequency", U"0");
-	POSITIVEVAR (relativeBandwidth, U"Relative bandwidth", U"1.1")
+	POSITIVE (firstFrequency, U"Position of first filter (Hz)", U"100.0")
+	POSITIVE (deltaFrequency, U"Distance between filters (Hz)", U"50.0")
+	REAL (maximumFrequency, U"Maximum frequency", U"0");
+	POSITIVE (relativeBandwidth, U"Relative bandwidth", U"1.1")
 	OK
 DO
 	CONVERT_TWO (Sound, Pitch)
@@ -5019,13 +5007,13 @@ DO
 }
 
 FORM (NEW1_Sound_and_Pitch_to_Spectrogram, U"Sound & Pitch: To Spectrogram", U"Sound & Pitch: To Spectrogram...") {
-	POSITIVEVAR (windowLength, U"Analysis window duration (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
+	POSITIVE (windowLength, U"Analysis window duration (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
 	LABEL (U"", U"Filter bank parameters")
-	POSITIVEVAR (firstFrequency, U"Position of first filter (Hz)", U"100.0")
-	POSITIVEVAR (deltaFrequency, U"Distance between filters (Hz)", U"50.0")
-	REALVAR (maximumFrequency, U"Maximum frequency", U"0");
-	POSITIVEVAR (relativeBandwidth, U"Relative bandwidth", U"1.1")
+	POSITIVE (firstFrequency, U"Position of first filter (Hz)", U"100.0")
+	POSITIVE (deltaFrequency, U"Distance between filters (Hz)", U"50.0")
+	REAL (maximumFrequency, U"Maximum frequency", U"0");
+	POSITIVE (relativeBandwidth, U"Relative bandwidth", U"1.1")
 	OK
 DO
 	CONVERT_TWO (Sound, Pitch)
@@ -5034,10 +5022,10 @@ DO
 }
 
 FORM (NEW1_Sound_and_Pitch_changeGender, U"Sound & Pitch: Change gender", U"Sound & Pitch: Change gender...") {
-	POSITIVEVAR (formantShiftRatio, U"Formant shift ratio", U"1.2")
-	REALVAR (newPitchMedian, U"New pitch median (Hz)", U"0.0 (= no change)")
-	POSITIVEVAR (pitchRangeFactor, U"Pitch range factor", U"1.0 (= no change)")
-	POSITIVEVAR (durationFactor, U"Duration factor", U"1.0")
+	POSITIVE (formantShiftRatio, U"Formant shift ratio", U"1.2")
+	REAL (newPitchMedian, U"New pitch median (Hz)", U"0.0 (= no change)")
+	POSITIVE (pitchRangeFactor, U"Pitch range factor", U"1.0 (= no change)")
+	POSITIVE (durationFactor, U"Duration factor", U"1.0")
 	OK
 DO
 	CONVERT_TWO (Sound, Pitch)
@@ -5046,10 +5034,10 @@ DO
 }
 
 FORM (NEW1_Sound_and_Pitch_changeSpeaker, U"Sound & Pitch: Change speaker", U"Sound & Pitch: Change speaker...") {
-	POSITIVEVAR (formantFrequencyMultiplicationFactor, U"Multiply formants by", U"1.1 (male->female)")
-	POSITIVEVAR (pitchMultiplicationFactor, U"Multiply pitch by", U"1.8 (male->female")
-	REALVAR (pitchRangeMultiplicationFactor, U"Multiply pitch range by", U"1.0 (= no change)")
-	POSITIVEVAR (durationMultiplicationFactor, U"Multiply duration", U"1.0")
+	POSITIVE (formantFrequencyMultiplicationFactor, U"Multiply formants by", U"1.1 (male->female)")
+	POSITIVE (pitchMultiplicationFactor, U"Multiply pitch by", U"1.8 (male->female")
+	REAL (pitchRangeMultiplicationFactor, U"Multiply pitch range by", U"1.0 (= no change)")
+	POSITIVE (durationMultiplicationFactor, U"Multiply duration", U"1.0")
 	OK
 DO
 	CONVERT_TWO (Sound, Pitch)
@@ -5058,7 +5046,7 @@ DO
 }
 
 FORM (NEW1_Sound_and_IntervalTier_cutPartsMatchingLabel, U"Sound & IntervalTier: Cut parts matching label", nullptr) {
-	SENTENCEVAR (label, U"Label", U"cut")
+	SENTENCE (label, U"Label", U"cut")
 	OK
 DO
 	CONVERT_TWO (Sound, IntervalTier)
@@ -5067,14 +5055,14 @@ DO
 }
 
 FORM (NEW1_Sound_createAsGammaTone, U"Create a gammatone", U"Create Sound as gammatone...") {
-	WORDVAR (name, U"Name", U"gammatone")
+	WORD (name, U"Name", U"gammatone")
 	Sound_create_addCommonFields (startTime, endTime, samplingFrequency)
-	INTEGERVAR (gamma, U"Gamma", U"4")
-	POSITIVEVAR (frequency, U"Frequency (Hz)", U"1000.0")
-	POSITIVEVAR (bandwidth, U"Bandwidth (Hz)", U"150.0")
-	REALVAR (initialPhase, U"Initial phase (radians)", U"0.0")
-	REALVAR (additionFactor, U"Addition factor", U"0.0")
-	BOOLEANVAR (scaleAmplitudes, U"Scale amplitudes", 1)
+	INTEGER (gamma, U"Gamma", U"4")
+	POSITIVE (frequency, U"Frequency (Hz)", U"1000.0")
+	POSITIVE (bandwidth, U"Bandwidth (Hz)", U"150.0")
+	REAL (initialPhase, U"Initial phase (radians)", U"0.0")
+	REAL (additionFactor, U"Addition factor", U"0.0")
+	BOOLEAN (scaleAmplitudes, U"Scale amplitudes", true)
 	OK
 DO
 	CREATE_ONE
@@ -5086,13 +5074,13 @@ DO
 }
 
 FORM (NEW_Sound_createAsShepardTone, U"Create a Shepard tone", U"Create Sound as Shepard tone...") {
-	WORDVAR (name, U"Name", U"shepardTone")
+	WORD (name, U"Name", U"shepardTone")
 	Sound_create_addCommonFields (startTime, endTime, samplingFrequency)
-	POSITIVEVAR (minimumFrequency, U"Lowest frequency (Hz)", U"4.863")
-	NATURALVAR (numberOfComponents, U"Number of components", U"10")
-	REALVAR (frequencyChange, U"Frequency change (semitones/s)", U"4.0")
-	POSITIVEVAR (amplitudeRange_dB, U"Amplitude range (dB)", U"30.0")
-	REALVAR (octaveShiftFraction, U"Octave shift fraction ([0,1))", U"0.0")
+	POSITIVE (minimumFrequency, U"Lowest frequency (Hz)", U"4.863")
+	NATURAL (numberOfComponents, U"Number of components", U"10")
+	REAL (frequencyChange, U"Frequency change (semitones/s)", U"4.0")
+	POSITIVE (amplitudeRange_dB, U"Amplitude range (dB)", U"30.0")
+	REAL (octaveShiftFraction, U"Octave shift fraction ([0,1))", U"0.0")
 	OK
 DO
 	CREATE_ONE
@@ -5103,17 +5091,17 @@ DO
 
 FORM (GRAPHICS_Sound_drawWhere, U"Sound: Draw where", U"Sound: Draw where...") {
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0 (= auto)")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0 (= auto)")
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"")
-	OPTIONMENUSTRVAR (drawingMethod, U"Drawing method", 1)
+	OPTIONMENUSTR (drawingMethod, U"Drawing method", 1)
 		OPTION (U"Curve")
 		OPTION (U"Bars")
 		OPTION (U"Poles")
 		OPTION (U"Speckles")
 	LABEL (U"", U"Draw only those parts where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"x < xmin + (xmax - xmin) / 2; first half")
+	TEXTFIELD (formula, U"Formula", U"x < xmin + (xmax - xmin) / 2; first half")
 	OK
 DO
 	long numberOfBisections = 10;
@@ -5123,7 +5111,7 @@ DO
 }
 
 FORM (PLAY_Sound_playOneChannel, U"Sound: Play one channel", nullptr) {
-    NATURALVAR (channel, U"Channel", U"1")
+    NATURAL (channel, U"Channel", U"1")
     OK
 DO
     LOOP {
@@ -5138,9 +5126,9 @@ DO
 END }
 
 FORM (PLAY_Sound_playAsFrequencyShifted, U"Sound: Play as frequency shifted", U"Sound: Play as frequency shifted...") {
-	REALVAR (frequencyShift, U"Shift by (Hz)", U"1000.0")
-	POSITIVEVAR (samplingFrequency, U"New sampling frequency (Hz)", U"44100.0")
-	NATURALVAR (samplePrecision, U"Precision (samples)", U"50")
+	REAL (frequencyShift, U"Shift by (Hz)", U"1000.0")
+	POSITIVE (samplingFrequency, U"New sampling frequency (Hz)", U"44100.0")
+	NATURAL (samplePrecision, U"Precision (samples)", U"50")
 	OK
 DO
 	LOOP {
@@ -5150,11 +5138,11 @@ DO
 END }
 
 FORM (NEW1_Sounds_to_DTW, U"Sounds: To DTW", nullptr) {
-    POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-    POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
+    POSITIVE (windowLength, U"Window length (s)", U"0.015")
+    POSITIVE (timeStep, U"Time step (s)", U"0.005")
     LABEL (U"", U"")
-    REALVAR (sakoeChibaBand, U"Sakoe-Chiba band (s)", U"0.1")
-    RADIOVAR (slopeConstraint, U"Slope constraint", 1)
+    REAL (sakoeChibaBand, U"Sakoe-Chiba band (s)", U"0.1")
+    RADIO (slopeConstraint, U"Slope constraint", 1)
 		RADIOBUTTON (U"no restriction")
 		RADIOBUTTON (U"1/3 < slope < 3")
 		RADIOBUTTON (U"1/2 < slope < 2")
@@ -5168,14 +5156,14 @@ DO
 
 FORM (NEW_Sound_to_TextGrid_detectSilences, U"Sound: To TextGrid (silences)", U"Sound: To TextGrid (silences)...") {
 	LABEL (U"", U"Parameters for the intensity analysis")
-	POSITIVEVAR (minimumPitch, U"Minimum pitch (Hz)", U"100")
-	REALVAR (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"100")
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
 	LABEL (U"", U"Silent intervals detection")
-	REALVAR (silenceThreshold, U"Silence threshold (dB)", U"-25.0")
-	POSITIVEVAR (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
-	POSITIVEVAR (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.1")
-	WORDVAR (silenceLabel, U"Silent interval label", U"silent")
-	WORDVAR (soundingLabel, U"Sounding interval label", U"sounding")
+	REAL (silenceThreshold, U"Silence threshold (dB)", U"-25.0")
+	POSITIVE (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
+	POSITIVE (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.1")
+	WORD (silenceLabel, U"Silent interval label", U"silent")
+	WORD (soundingLabel, U"Sounding interval label", U"sounding")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -5185,7 +5173,7 @@ DO
 
 FORM (NEW_Sound_copyChannelRanges, U"Sound: Copy channel ranges", nullptr) {
 	LABEL (U"", U"Create a new Sound from the following channels:")
-	TEXTVAR (channels_string, U"Ranges", U"1:64")
+	TEXTFIELD (channels_string, U"Ranges", U"1:64")
 	LABEL (U"", U"To supply rising or falling ranges, use e.g. 2:6 or 5:3.")
 	OK
 DO
@@ -5195,17 +5183,17 @@ DO
 }
 
 FORM (NEW_Sound_trimSilences, U"Sound: Trim silences", U"Sound: Trim silences...") {
-    REALVAR (trimDuration, U"Trim duration (s)", U"0.08")
-	BOOLEANVAR (onlyAtStartAndEnd, U"Only at start and end", true);
+    REAL (trimDuration, U"Trim duration (s)", U"0.08")
+	BOOLEAN (onlyAtStartAndEnd, U"Only at start and end", true);
 	LABEL (U"", U"Parameters for the intensity analysis")
-	POSITIVEVAR (minimumPitch, U"Minimum pitch (Hz)", U"100")
-	REALVAR (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"100")
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
 	LABEL (U"", U"Silent intervals detection")
-	REALVAR (silenceThreshold, U"Silence threshold (dB)", U"-35.0")
-	POSITIVEVAR (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
-	POSITIVEVAR (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.05")
-    BOOLEANVAR (saveTextGrid, U"Save trimming info as TextGrid", false)
-    WORDVAR (trim_string, U"Trim label", U"trimmed")
+	REAL (silenceThreshold, U"Silence threshold (dB)", U"-35.0")
+	POSITIVE (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
+	POSITIVE (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.05")
+    BOOLEAN (saveTextGrid, U"Save trimming info as TextGrid", false)
+    WORD (trim_string, U"Trim label", U"trimmed")
 	OK
 DO
     trimDuration = trimDuration < 0.0 ? 0.0 : trimDuration;
@@ -5220,12 +5208,12 @@ DO
 
 // deprecated
 FORM (NEW_Sound_to_BarkFilter, U"Sound: To BarkFilter", U"Sound: To BarkSpectrogram...") {
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
 	LABEL (U"", U"Filter bank parameters")
-	POSITIVEVAR (firstFrequency, U"Position of first filter (bark)", U"1.0")
-	POSITIVEVAR (deltaFrequency, U"Distance between filters (bark)", U"1.0")
-	REALVAR (maximumFrequency, U"Maximum frequency (bark)", U"0.0");
+	POSITIVE (firstFrequency, U"Position of first filter (bark)", U"1.0")
+	POSITIVE (deltaFrequency, U"Distance between filters (bark)", U"1.0")
+	REAL (maximumFrequency, U"Maximum frequency (bark)", U"0.0");
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -5234,12 +5222,12 @@ DO
 }
 
 FORM (NEW_Sound_to_BarkSpectrogram, U"Sound: To BarkSpectrogram", U"Sound: To BarkSpectrogram...") {
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
 	LABEL (U"", U"Filter bank parameters")
-	POSITIVEVAR (firstFrequency, U"Position of first filter (bark)", U"1.0")
-	POSITIVEVAR (deltaFrequency, U"Distance between filters (bark)", U"1.0")
-	REALVAR (maximumFrequency, U"Maximum frequency (bark)", U"0.0");
+	POSITIVE (firstFrequency, U"Position of first filter (bark)", U"1.0")
+	POSITIVE (deltaFrequency, U"Distance between filters (bark)", U"1.0")
+	REAL (maximumFrequency, U"Maximum frequency (bark)", U"0.0");
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -5249,16 +5237,16 @@ DO
 
 // deprecated
 FORM (NEW_Sound_to_FormantFilter, U"Sound: To FormantFilter", U"Sound: To FormantFilter...") {
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
 	LABEL (U"", U"Filter bank parameters")
-	POSITIVEVAR (firstFrequency, U"Position of first filter (Hz)", U"100.0")
-	POSITIVEVAR (deltaFrequency, U"Distance between filters (Hz)", U"50.0")
-	REALVAR (maximumFrequency, U"Maximum frequency", U"0.0");
-	POSITIVEVAR (relativeBandwidth, U"Relative bandwidth", U"1.1")
+	POSITIVE (firstFrequency, U"Position of first filter (Hz)", U"100.0")
+	POSITIVE (deltaFrequency, U"Distance between filters (Hz)", U"50.0")
+	REAL (maximumFrequency, U"Maximum frequency", U"0.0");
+	POSITIVE (relativeBandwidth, U"Relative bandwidth", U"1.1")
 	LABEL (U"", U"Pitch analysis")
-	REALVAR (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
-	REALVAR (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
+	REAL (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
+	REAL (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -5267,16 +5255,16 @@ DO
 }
 
 FORM (NEW_Sound_to_Spectrogram_pitchDependent, U"Sound: To Spectrogram (pitch-dependent)", U"Sound: To Spectrogram (pitch-dependent)...") {
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
 	LABEL (U"", U"Filter bank parameters")
-	POSITIVEVAR (firstFrequency, U"Position of first filter (Hz)", U"100.0")
-	POSITIVEVAR (deltaFrequency, U"Distance between filters (Hz)", U"50.0")
-	REALVAR (maximumFrequency, U"Maximum frequency", U"0.0");
-	POSITIVEVAR (relativeBandwidth, U"Relative bandwidth", U"1.1")
+	POSITIVE (firstFrequency, U"Position of first filter (Hz)", U"100.0")
+	POSITIVE (deltaFrequency, U"Distance between filters (Hz)", U"50.0")
+	REAL (maximumFrequency, U"Maximum frequency", U"0.0");
+	POSITIVE (relativeBandwidth, U"Relative bandwidth", U"1.1")
 	LABEL (U"", U"Pitch analysis")
-	REALVAR (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
-	REALVAR (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
+	REAL (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
+	REAL (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -5286,12 +5274,12 @@ DO
 
 // deprecated
 FORM (NEW_Sound_to_MelFilter, U"Sound: To MelFilter", U"Sound: To MelFilter...") {
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
 	LABEL (U"", U"Filter bank parameters")
-	POSITIVEVAR (firstFrequency, U"Position of first filter (mel)", U"100.0")
-	POSITIVEVAR (deltaFrequency, U"Distance between filters (mel)", U"100.0")
-	REALVAR (maximumFrequency, U"Maximum frequency (mel)", U"0.0");
+	POSITIVE (firstFrequency, U"Position of first filter (mel)", U"100.0")
+	POSITIVE (deltaFrequency, U"Distance between filters (mel)", U"100.0")
+	REAL (maximumFrequency, U"Maximum frequency (mel)", U"0.0");
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -5300,12 +5288,12 @@ DO
 }
 
 FORM (NEW_Sound_to_MelSpectrogram, U"Sound: To MelSpectrogram", U"Sound: To MelSpectrogram...") {
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
 	LABEL (U"", U"Filter bank parameters")
-	POSITIVEVAR (firstFrequency, U"Position of first filter (mel)", U"100.0")
-	POSITIVEVAR (deltaFrequency, U"Distance between filters (mel)", U"100.0")
-	REALVAR (maximumFrequency, U"Maximum frequency (mel)", U"0.0");
+	POSITIVE (firstFrequency, U"Position of first filter (mel)", U"100.0")
+	POSITIVE (deltaFrequency, U"Distance between filters (mel)", U"100.0")
+	REAL (maximumFrequency, U"Maximum frequency (mel)", U"0.0");
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -5314,8 +5302,8 @@ DO
 }
 
 FORM (NEW_Sound_to_ComplexSpectrogram, U"Sound: To ComplexSpectrogram", nullptr) {
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.015")
-	POSITIVEVAR (timeStep, U"Time step", U"0.005")
+	POSITIVE (windowLength, U"Window length (s)", U"0.015")
+	POSITIVE (timeStep, U"Time step", U"0.005")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -5324,15 +5312,15 @@ DO
 }
 
 FORM (NEW_Sound_to_Pitch_shs, U"Sound: To Pitch (shs)", U"Sound: To Pitch (shs)...") {
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.01")
-	POSITIVEVAR (pitchFloor, U"Minimum pitch (Hz)", U"50.0")
-	NATURALVAR (maximumNumberOfCandidates, U"Max. number of candidates (Hz)", U"15")
+	POSITIVE (timeStep, U"Time step (s)", U"0.01")
+	POSITIVE (pitchFloor, U"Minimum pitch (Hz)", U"50.0")
+	NATURAL (maximumNumberOfCandidates, U"Max. number of candidates (Hz)", U"15")
 	LABEL (U"", U"Algorithm parameters")
-	POSITIVEVAR (maximumFrequency, U"Maximum frequency component (Hz)", U"1250.0")
-	NATURALVAR (maximumNumberOfSubharmonics, U"Max. number of subharmonics", U"15")
-	POSITIVEVAR (compressionFactor, U"Compression factor (<=1)", U"0.84")
-	POSITIVEVAR (pitchCeiling, U"Ceiling (Hz)", U"600.0")
-	NATURALVAR (numberOfPointsPerOctave, U"Number of points per octave", U"48");
+	POSITIVE (maximumFrequency, U"Maximum frequency component (Hz)", U"1250.0")
+	NATURAL (maximumNumberOfSubharmonics, U"Max. number of subharmonics", U"15")
+	POSITIVE (compressionFactor, U"Compression factor (<=1)", U"0.84")
+	POSITIVE (pitchCeiling, U"Ceiling (Hz)", U"600.0")
+	NATURAL (numberOfPointsPerOctave, U"Number of points per octave", U"48");
 	OK
 DO
 	REQUIRE (pitchFloor < pitchCeiling, U"Minimum pitch should be smaller than ceiling.")
@@ -5343,10 +5331,10 @@ DO
 }
 
 FORM (MODIFY_Sound_fadeIn, U"Sound: Fade in", U"Sound: Fade in...") {
-	CHANNELVAR (channel, U"Channel (number, 0 = (all))", U"1")
-	REALVAR (time, U"Time (s)", U"-10000.0")
-	REALVAR (fadeTime, U"Fade time (s)", U"0.005")
-	BOOLEANVAR (silentFromStart, U"Silent from start", false)
+	CHANNEL (channel, U"Channel (number; 0 = all)", U"1")
+	REAL (time, U"Time (s)", U"-10000.0")
+	REAL (fadeTime, U"Fade time (s)", U"0.005")
+	BOOLEAN (silentFromStart, U"Silent from start", false)
 	OK
 DO
 	MODIFY_EACH (Sound)
@@ -5355,10 +5343,10 @@ DO
 }
 
 FORM (MODIFY_Sound_fadeOut, U"Sound: Fade out", U"Sound: Fade out...") {
-	CHANNELVAR (channel, U"Channel (number, 0 = (all))", U"1")
-	REALVAR (time, U"Time (s)", U"10000.0")
-	REALVAR (fadeTime, U"Fade time (s)", U"-0.005")
-	BOOLEANVAR (silentToEnd, U"Silent to end", false)
+	CHANNEL (channel, U"Channel (number; 0 = all)", U"1")
+	REAL (time, U"Time (s)", U"10000.0")
+	REAL (fadeTime, U"Fade time (s)", U"-0.005")
+	BOOLEAN (silentToEnd, U"Silent to end", false)
 	OK
 DO
 	MODIFY_EACH (Sound)
@@ -5367,18 +5355,18 @@ DO
 }
 
 FORM (NEW_Sound_to_KlattGrid_simple, U"Sound: To KlattGrid (simple)", U"Sound: To KlattGrid (simple)...") {
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
 	LABEL (U"", U"Formant determination")
-	NATURALVAR (numberOfFormants, U"Max. number of formants", U"5")
-	POSITIVEVAR (maximumFormant, U"Maximum formant (Hz)", U"5500 (= adult female)")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.025")
-	POSITIVEVAR (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
+	NATURAL (numberOfFormants, U"Max. number of formants", U"5")
+	POSITIVE (maximumFormant, U"Maximum formant (Hz)", U"5500 (= adult female)")
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
+	POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
 	LABEL (U"", U"Pitch determination")
-	POSITIVEVAR (pitchFloor, U"Pitch floor (Hz)", U"60.0")
-	POSITIVEVAR (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
+	POSITIVE (pitchFloor, U"Pitch floor (Hz)", U"60.0")
+	POSITIVE (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
 	LABEL (U"", U"Intensity determination")
-	POSITIVEVAR (minimumPitch, U"Minimum pitch (Hz)", U"100.0")
-	BOOLEANVAR (subtractMean, U"Subtract mean", true)
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"100.0")
+	BOOLEAN (subtractMean, U"Subtract mean", true)
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -5387,14 +5375,14 @@ DO
 }
 
 FORM (NEW_Sound_to_Pitch_SPINET, U"Sound: To SPINET", U"Sound: To SPINET...") {
-	POSITIVEVAR (timeStep, U"Time step (s)", U"0.005")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.040")
+	POSITIVE (timeStep, U"Time step (s)", U"0.005")
+	POSITIVE (windowLength, U"Window length (s)", U"0.040")
 	LABEL (U"", U"Gammatone filter bank")
-	POSITIVEVAR (minimumFrequency, U"Minimum filter frequency (Hz)", U"70.0")
-	POSITIVEVAR (maximumFrequency, U"Maximum filter frequency (Hz)", U"5000.0")
-	NATURALVAR (numberOfFilters, U"Number of filters", U"250");
-	POSITIVEVAR (pitchCeiling, U"Ceiling (Hz)", U"500.0")
-	NATURALVAR (maximumNumberOfCandidates, U"Max. number of candidates", U"15")
+	POSITIVE (minimumFrequency, U"Minimum filter frequency (Hz)", U"70.0")
+	POSITIVE (maximumFrequency, U"Maximum filter frequency (Hz)", U"5000.0")
+	NATURAL (numberOfFilters, U"Number of filters", U"250");
+	POSITIVE (pitchCeiling, U"Ceiling (Hz)", U"500.0")
+	NATURAL (maximumNumberOfCandidates, U"Max. number of candidates", U"15")
 	OK
 DO
 	REQUIRE (minimumFrequency < maximumFrequency, U"Maximum frequency must be larger than minimum frequency.")
@@ -5404,11 +5392,11 @@ DO
 }
 
 FORM (NEW_Sound_to_Polygon, U"Sound: To Polygon", U"Sound: To Polygon...") {
-	CHANNELVAR (channel, U"Channel (number, Left, or Right)", U"1")
+	CHANNEL (channel, U"Channel (number, Left, or Right)", U"1")
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	REALVAR (connectionY, U"Connection y-value", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	REAL (connectionY, U"Connection y-value", U"0.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -5418,12 +5406,10 @@ DO
 }
 
 FORM (NEW1_Sounds_to_Polygon_enclosed, U"Sounds: To Polygon (enclosed)", U"Sounds: To Polygon (enclosed)...") {
-	CHANNELVAR (channel, U"Channel (number, Left, or Right)", U"1")
-		OPTION (U"Left")
-		OPTION (U"Right")
+	CHANNEL (channel, U"Channel (number, Left, or Right)", U"1")
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
 	OK
 DO
 	CONVERT_COUPLE (Sound)
@@ -5432,8 +5418,8 @@ DO
 }
 
 FORM (NEW_Sound_filterByGammaToneFilter4, U"Sound: Filter (gammatone)", U"Sound: Filter (gammatone)...") {
-	POSITIVEVAR (centreFrequency, U"Centre frequency (Hz)", U"1000.0")
-	POSITIVEVAR (bandwidth, U"Bandwidth (Hz)", U"150.0")
+	POSITIVE (centreFrequency, U"Centre frequency (Hz)", U"1000.0")
+	POSITIVE (bandwidth, U"Bandwidth (Hz)", U"150.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -5442,14 +5428,14 @@ DO
 }
 
 FORM (NEW_Sound_removeNoise, U"Sound: Remove noise", U"Sound: Remove noise...") {
-	REALVAR (fromTime, U"left Noise time range (s)", U"0.0")
-	REALVAR (toTime, U"right Noise time range (s)", U"0.0")
-	POSITIVEVAR (windowLength, U"Window length (s)", U"0.025")
+	REAL (fromTime, U"left Noise time range (s)", U"0.0")
+	REAL (toTime, U"right Noise time range (s)", U"0.0")
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
 	LABEL (U"", U"Filter")
-	REALVAR (fromFrequency, U"left Filter frequency range (Hz)", U"80.0")
-	REALVAR (toFrequency, U"right Filter frequency range (Hz)", U"10000.0")
-	POSITIVEVAR (smoothingBandwidth, U"Smoothing bandwidth, (Hz)", U"40.0")
-	OPTIONMENUVAR (noiseReductionMethod, U"Noise reduction method", 1)
+	REAL (fromFrequency, U"left Filter frequency range (Hz)", U"80.0")
+	REAL (toFrequency, U"right Filter frequency range (Hz)", U"10000.0")
+	POSITIVE (smoothingBandwidth, U"Smoothing bandwidth, (Hz)", U"40.0")
+	OPTIONMENU (noiseReductionMethod, U"Noise reduction method", 1)
 		OPTION (U"Spectral subtraction")
 	OK
 DO
@@ -5460,13 +5446,13 @@ DO
 
 FORM (NEW_Sound_changeSpeaker, U"Sound: Change speaker", U"Sound: Change speaker...") {
 	LABEL (U"", U"Pitch measurement parameters")
-	POSITIVEVAR (pitchFloor, U"Pitch floor (Hz)", U"75.0")
-	POSITIVEVAR (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
+	POSITIVE (pitchFloor, U"Pitch floor (Hz)", U"75.0")
+	POSITIVE (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
 	LABEL (U"", U"Modification parameters")
-	POSITIVEVAR (formantMultiplicationFactor, U"Multiply formants by", U"1.2")
-	POSITIVEVAR (pitchMultiplicationFactor, U"Multiply pitch by", U"1.0")
-	REALVAR (pitchRangeMultiplicationFactor, U"Multiply pitch range by", U"1.0 (= no change)")
-	POSITIVEVAR (durationMultiplicationFactor, U"Multiply duration by", U"1.0")
+	POSITIVE (formantMultiplicationFactor, U"Multiply formants by", U"1.2")
+	POSITIVE (pitchMultiplicationFactor, U"Multiply pitch by", U"1.0")
+	REAL (pitchRangeMultiplicationFactor, U"Multiply pitch range by", U"1.0 (= no change)")
+	POSITIVE (durationMultiplicationFactor, U"Multiply duration by", U"1.0")
 	OK
 DO
 	REQUIRE (pitchFloor < pitchCeiling, U"Maximum pitch should be greater than minimum pitch.")
@@ -5477,13 +5463,13 @@ DO
 
 FORM (NEW_Sound_changeGender, U"Sound: Change gender", U"Sound: Change gender...") {
 	LABEL (U"", U"Pitch measurement parameters")
-	POSITIVEVAR (pitchFloor, U"Pitch floor (Hz)", U"75.0")
-	POSITIVEVAR (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
+	POSITIVE (pitchFloor, U"Pitch floor (Hz)", U"75.0")
+	POSITIVE (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
 	LABEL (U"", U"Modification parameters")
-	POSITIVEVAR (formantShiftRatio, U"Formant shift ratio", U"1.2")
-	REALVAR (pitchMedian, U"New pitch median (Hz)", U"0.0 (= no change)")
-	REALVAR (pitchRangeMultiplicationFactor, U"Pitch range factor", U"1.0 (= no change)")
-	POSITIVEVAR (durationMultiplicationFactor, U"Duration factor", U"1.0")
+	POSITIVE (formantShiftRatio, U"Formant shift ratio", U"1.2")
+	REAL (pitchMedian, U"New pitch median (Hz)", U"0.0 (= no change)")
+	REAL (pitchRangeMultiplicationFactor, U"Pitch range factor", U"1.0 (= no change)")
+	POSITIVE (durationMultiplicationFactor, U"Duration factor", U"1.0")
 	OK
 DO
 	REQUIRE (pitchFloor < pitchCeiling, U"Maximum pitch should be greater than minimum pitch.")
@@ -5495,12 +5481,12 @@ DO
 FORM (GRAPHICS_Sound_paintWhere, U"Sound paint where", U"Sound: Paint where...") {
 	COLOUR (U"Colour (0-1, name, or {r,g,b})", U"0.5")
 	praat_TimeFunction_RANGE(fromTime,toTime)
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	REALVAR (level, U"Fill from level", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	REAL (level, U"Fill from level", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"Paint only those parts where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; always")
+	TEXTFIELD (formula, U"Formula", U"1; always")
 	OK
 DO
 	Graphics_Colour colour = GET_COLOUR (U"Colour");
@@ -5513,11 +5499,11 @@ DO
 
 FORM (GRAPHICS_Sounds_paintEnclosed, U"Sounds paint enclosed", U"Sounds: Paint enclosed...") {
 	COLOUR (U"Colour (0-1, name, or {r,g,b})", U"0.5")
-	REALVAR (xFromTime, U"left Horizontal time range (s)", U"0.0")
-	REALVAR (xToTime, U"right Horizontal time range (s)", U"0.0")
-	REALVAR (yFromTime, U"left Vertical time range", U"0.0")
-	REALVAR (yToTime, U"right Vertical time range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xFromTime, U"left Horizontal time range (s)", U"0.0")
+	REAL (xToTime, U"right Horizontal time range (s)", U"0.0")
+	REAL (yFromTime, U"left Vertical time range", U"0.0")
+	REAL (yToTime, U"right Vertical time range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	Graphics_Colour colour = GET_COLOUR (U"Colour");
@@ -5555,12 +5541,12 @@ DO
 /**************** Spectrum *******************************************/
 
 FORM (GRAPHICS_Spectrum_drawPhases, U"Spectrum: Draw phases", U"Spectrum: Draw phases...") {
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (Hz)", U"0.0")
-	REALVAR (fromPhase, U"Minimum phase (dB/Hz)", U"0.0 (= auto)")
-	REALVAR (toPhase, U"Maximum phase (dB/Hz)", U"0.0 (= auto)")
-	BOOLEANVAR (unwrap, U"Unwrap", 1)
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"0.0")
+	REAL (fromPhase, U"Minimum phase (dB/Hz)", U"0.0 (= auto)")
+	REAL (toPhase, U"Maximum phase (dB/Hz)", U"0.0 (= auto)")
+	BOOLEAN (unwrap, U"Unwrap", 1)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Spectrum)
@@ -5569,8 +5555,8 @@ DO
 }
 
 FORM (MODIFY_Spectrum_setRealValueInBin, U"Spectrum: Set real value in bin", nullptr) {
-	NATURALVAR (binNumber, U"Bin number", U"100")
-	REALVAR (value, U"Value", U"0.0")
+	NATURAL (binNumber, U"Bin number", U"100")
+	REAL (value, U"Value", U"0.0")
 	OK
 DO
 	MODIFY_EACH (Spectrum)
@@ -5580,8 +5566,8 @@ DO
 }
 
 FORM (MODIFY_Spectrum_setImaginaryValueInBin, U"Spectrum: Set imaginary value in bin", nullptr) {
-	NATURALVAR (binNumber, U"Bin number", U"100")
-	REALVAR (value, U"Value", U"0.0")
+	NATURAL (binNumber, U"Bin number", U"100")
+	REAL (value, U"Value", U"0.0")
 	OK
 DO
 	MODIFY_EACH (Spectrum)
@@ -5597,9 +5583,9 @@ DIRECT (MODIFY_Spectrum_conjugate) {
 }
 
 FORM (NEW_Spectrum_shiftFrequencies, U"Spectrum: Shift frequencies", U"Spectrum: Shift frequencies...") {
-	REALVAR (frequencyShift, U"Shift by (Hz)", U"1000.0")
-	POSITIVEVAR (maximumFrequency, U"New maximum frequency (Hz)", U"22050")
-	NATURALVAR (interpolationDepth, U"Interpolation depth", U"50")
+	REAL (frequencyShift, U"Shift by (Hz)", U"1000.0")
+	POSITIVE (maximumFrequency, U"New maximum frequency (Hz)", U"22050")
+	NATURAL (interpolationDepth, U"Interpolation depth", U"50")
 	OK
 DO
 	CONVERT_EACH (Spectrum)
@@ -5614,7 +5600,7 @@ DIRECT (NEW_Spectra_multiply) {
 }
 
 FORM (NEW_Spectrum_resample, U"Spectrum: Resample", nullptr) {
-	NATURALVAR (numberOfFrequencies, U"New number of frequencies", U"256")
+	NATURAL (numberOfFrequencies, U"New number of frequencies", U"256")
 	OK
 DO
 	CONVERT_EACH (Spectrum)
@@ -5623,9 +5609,9 @@ DO
 }
 
 FORM (NEW_Spectrum_compressFrequencyDomain, U"Spectrum: Compress frequency domain", nullptr) {
-	POSITIVEVAR (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
-	INTEGERVAR (interpolationDepth, U"Interpolation depth", U"50")
-	RADIOVAR (scale, U"Interpolation scale", 1)
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
+	INTEGER (interpolationDepth, U"Interpolation depth", U"50")
+	RADIO (scale, U"Interpolation scale", 1)
 		RADIOBUTTON (U"Linear")
 		RADIOBUTTON (U"Logarithmic")
 	OK
@@ -5669,9 +5655,9 @@ FORM (NEW1_SpeechSynthesizer_create, U"Create SpeechSynthesizer", U"Create Speec
 		prefLanguage = 1;
 	}
 	// LIST does not scroll to the line with "prefLanguage"
-	LISTVAR (languageIndex, U"Language", espeakdata_voices_names -> numberOfStrings, (const char32 **) espeakdata_voices_names -> strings, prefLanguage)
+	LIST (languageIndex, U"Language", espeakdata_voices_names -> numberOfStrings, (const char32 **) espeakdata_voices_names -> strings, prefLanguage)
 	static long prefVoiceVariant = Strings_findString (espeakdata_variants_names.get(), U"default");
-	LISTVAR (voiceVariantIndex, U"Voice variant", espeakdata_variants_names -> numberOfStrings,
+	LIST (voiceVariantIndex, U"Voice variant", espeakdata_variants_names -> numberOfStrings,
 		(const char32 **) espeakdata_variants_names -> strings, prefVoiceVariant)
 	OK
 DO
@@ -5681,7 +5667,7 @@ DO
 }
 
 FORM (PLAY_SpeechSynthesizer_playText, U"SpeechSynthesizer: Play text", U"SpeechSynthesizer: Play text...") {
-	TEXTVAR (text, U"Text", U"This is some text.")
+	TEXTFIELD (text, U"Text", U"This is some text.")
 	OK
 DO
 	LOOP {
@@ -5691,8 +5677,8 @@ DO
 END }
 
 FORM (NEWMANY_SpeechSynthesizer_to_Sound, U"SpeechSynthesizer: To Sound", U"SpeechSynthesizer: To Sound...") {
-	TEXTVAR (text, U"Text", U"This is some text.")
-	BOOLEANVAR (wantTextGrid, U"Create TextGrid with annotations", false);
+	TEXTFIELD (text, U"Text", U"This is some text.")
+	BOOLEAN (wantTextGrid, U"Create TextGrid with annotations", false);
 	OK
 DO
 	CONVERT_EACH (SpeechSynthesizer)
@@ -5721,11 +5707,11 @@ DIRECT (INFO_SpeechSynthesizer_getVoiceVariant) {
 }
 
 FORM (MODIFY_SpeechSynthesizer_setTextInputSettings, U"SpeechSynthesizer: Set text input settings", U"SpeechSynthesizer: Set text input settings...") {
-	OPTIONMENUVAR (inputTextFormat, U"Input text format is", 1)
+	OPTIONMENU (inputTextFormat, U"Input text format is", 1)
 		OPTION (U"Text only")
 		OPTION (U"Phoneme codes only")
 		OPTION (U"Mixed with tags")
-	OPTIONMENUVAR (inputPhonemeCoding, U"Input phoneme codes are", 1)
+	OPTIONMENU (inputPhonemeCoding, U"Input phoneme codes are", 1)
 		OPTION (U"Kirshenbaum_espeak")
 	OK
 DO
@@ -5736,13 +5722,13 @@ DO
 }
 
 FORM (MODIFY_SpeechSynthesizer_setSpeechOutputSettings, U"SpeechSynthesizer: Set speech output settings", U"SpeechSynthesizer: Set speech output settings...") {
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
-	REALVAR (wordGap, U"Gap between words (s)", U"0.01")
-	INTEGERVAR (pitchAdjustment, U"Pitch adjustment (0-99)", U"50")
-	INTEGERVAR (pitchRange_0_99, U"Pitch range (0-99)", U"50");
-	NATURALVAR (wordsPerMinute, U"Words per minute (80-450)", U"175");
-	BOOLEANVAR (estimateWordsPerMinute, U"Estimate rate from data", true);
-	OPTIONMENUVAR (outputPhonemeCodes, U"Output phoneme codes are", 2)
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	REAL (wordGap, U"Gap between words (s)", U"0.01")
+	INTEGER (pitchAdjustment, U"Pitch adjustment (0-99)", U"50")
+	INTEGER (pitchRange_0_99, U"Pitch range (0-99)", U"50");
+	NATURAL (wordsPerMinute, U"Words per minute (80-450)", U"175");
+	BOOLEAN (estimateWordsPerMinute, U"Estimate rate from data", true);
+	OPTIONMENU (outputPhonemeCodes, U"Output phoneme codes are", 2)
 		OPTION (U"Kirshenbaum_espeak")
 		OPTION (U"IPA")
 	OK
@@ -5760,9 +5746,9 @@ DO
 /************* SpeechSynthesizer and TextGrid ************************/
 
 FORM (NEW1_SpeechSynthesizer_and_TextGrid_to_Sound, U"SpeechSynthesizer & TextGrid: To Sound", nullptr) {
-	NATURALVAR (tierNumber, U"Tier number", U"1")
-	NATURALVAR (intervalNumber, U"Interval number", U"1")
-	BOOLEANVAR (createAnnotations, U"Create TextGrid with annotations", false);
+	NATURAL (tierNumber, U"Tier number", U"1")
+	NATURAL (intervalNumber, U"Interval number", U"1")
+	BOOLEAN (createAnnotations, U"Create TextGrid with annotations", false);
 	OK
 DO
 	CONVERT_TWO (SpeechSynthesizer, TextGrid)
@@ -5775,12 +5761,12 @@ DO
 }
 
 FORM (NEW1_SpeechSynthesizer_and_Sound_and_TextGrid_align, U"SpeechSynthesizer & Sound & TextGrid: To TextGrid (align)", nullptr) {
-	NATURALVAR (tierNumber, U"Tier number", U"1")
-	NATURALVAR (fromInterval, U"From interval number", U"1")
-	NATURALVAR (toInterval, U"To interval number", U"1")
-	REALVAR (silenceThreshold_dB, U"Silence threshold (dB)", U"-35.0")
-	POSITIVEVAR (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
-	POSITIVEVAR (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.1")
+	NATURAL (tierNumber, U"Tier number", U"1")
+	NATURAL (fromInterval, U"From interval number", U"1")
+	NATURAL (toInterval, U"To interval number", U"1")
+	REAL (silenceThreshold_dB, U"Silence threshold (dB)", U"-35.0")
+	POSITIVE (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
+	POSITIVE (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.1")
 	OK
 DO
 	CONVERT_THREE (SpeechSynthesizer, Sound, TextGrid)
@@ -5789,13 +5775,13 @@ DO
 }
 
 FORM (NEW1_SpeechSynthesizer_and_Sound_and_TextGrid_align2, U"SpeechSynthesizer & Sound & TextGrid: To TextGrid (align, trim)", nullptr) {
-    NATURALVAR (tierNumber, U"Tier number", U"1")
-    NATURALVAR (fromInterval, U"From interval number", U"1")
-    NATURALVAR (toInterval, U"To interval number", U"1")
-    REALVAR (silenceThreshold_dB, U"Silence threshold (dB)", U"-35.0")
-    POSITIVEVAR (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
-    POSITIVEVAR (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.1")
-    REALVAR (trimDuration, U"Silence trim duration (s)", U"0.08")
+    NATURAL (tierNumber, U"Tier number", U"1")
+    NATURAL (fromInterval, U"From interval number", U"1")
+    NATURAL (toInterval, U"To interval number", U"1")
+    REAL (silenceThreshold_dB, U"Silence threshold (dB)", U"-35.0")
+    POSITIVE (minimumSilenceDuration, U"Minimum silent interval duration (s)", U"0.1")
+    POSITIVE (minimumSoundingDuration, U"Minimum sounding interval duration (s)", U"0.1")
+    REAL (trimDuration, U"Silence trim duration (s)", U"0.08")
     OK
 DO
    trimDuration = trimDuration < 0.0 ? 0.0 : trimDuration;
@@ -5807,11 +5793,11 @@ DO
 /************* Spline *************************************************/
 
 FORM (GRAPHICS_Spline_drawKnots, U"Spline: Draw knots", nullptr) {
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Spline)
@@ -5827,8 +5813,8 @@ DIRECT (INTEGER_Spline_getOrder) {
 
 FORM (NEW_Spline_scaleX, U"Spline: Scale x", U"Spline: Scale x...") {
 	LABEL (U"", U"New domain")
-	REALVAR (xmin, U"Xmin", U"-1.0")
-	REALVAR (xmax, U"Xmax", U"1.0")
+	REAL (xmin, U"Xmin", U"-1.0")
+	REAL (xmax, U"Xmax", U"1.0")
 	OK
 DO
 	REQUIRE (xmin < xmax, U"Xmin must be smaller than Xmax.")
@@ -5844,14 +5830,14 @@ DIRECT (HELP_SSCP_help) {
 }
 
 FORM (GRAPHICS_SSCP_drawConfidenceEllipse, U"SSCP: Draw confidence ellipse", nullptr) {
-	POSITIVEVAR (confidenceLevel, U"Confidence level", U"0.95")
-	NATURALVAR (xIndex, U"Index for X-axis", U"1")
-	NATURALVAR (yIndex, U"Index for Y-axis", U"2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	POSITIVE (confidenceLevel, U"Confidence level", U"0.95")
+	NATURAL (xIndex, U"Index for X-axis", U"1")
+	NATURAL (yIndex, U"Index for Y-axis", U"2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (SSCP)
@@ -5860,14 +5846,14 @@ DO
 }
 
 FORM (GRAPHICS_SSCP_drawSigmaEllipse, U"SSCP: Draw sigma ellipse", U"SSCP: Draw sigma ellipse...") {
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	NATURALVAR (xIndex, U"Index for X-axis", U"1")
-	NATURALVAR (yIndex, U"Index for Y-axis", U"2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"1.0")
+	NATURAL (xIndex, U"Index for X-axis", U"1")
+	NATURAL (yIndex, U"Index for Y-axis", U"2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (SSCP)
@@ -5882,9 +5868,9 @@ DIRECT (NEW_SSCP_extractCentroid) {
 }
 
 FORM (REAL_SSCP_getConfidenceEllipseArea, U"SSCP: Get confidence ellipse area", U"SSCP: Get confidence ellipse area...") {
-	POSITIVEVAR (confidenceLevel, U"Confidence level", U"0.95")
-	NATURALVAR (xIndex, U"Index for X-axis", U"1")
-	NATURALVAR (yIndex, U"Index for Y-axis", U"2")
+	POSITIVE (confidenceLevel, U"Confidence level", U"0.95")
+	NATURAL (xIndex, U"Index for X-axis", U"1")
+	NATURAL (yIndex, U"Index for Y-axis", U"2")
 	OK
 DO
 	NUMBER_ONE (SSCP)
@@ -5893,8 +5879,8 @@ DO
 }
 
 FORM (REAL_SSCP_getFractionVariation, U"SSCP: Get fraction variation", U"SSCP: Get fraction variation...") {
-	NATURALVAR (fromDimension, U"From dimension", U"1")
-	NATURALVAR (toDimension, U"To dimension", U"1")
+	NATURAL (fromDimension, U"From dimension", U"1")
+	NATURAL (toDimension, U"To dimension", U"1")
 	OK
 DO
 	NUMBER_ONE (SSCP)
@@ -5904,9 +5890,9 @@ DO
 
 
 FORM (REAL_SSCP_getConcentrationEllipseArea, U"SSCP: Get sigma ellipse area", U"SSCP: Get sigma ellipse area...") {
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	NATURALVAR (xIndex, U"Index for X-axis", U"1")
-	NATURALVAR (yIndex, U"Index for Y-axis", U"2")
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"1.0")
+	NATURAL (xIndex, U"Index for X-axis", U"1")
+	NATURAL (yIndex, U"Index for Y-axis", U"2")
 	OK
 DO
 	NUMBER_ONE (SSCP)
@@ -5933,7 +5919,7 @@ DIRECT (REAL_SSCP_getTotalVariance) {
 }
 
 FORM (REAL_SSCP_getCentroidElement, U"SSCP: Get centroid element", U"SSCP: Get centroid element") {
-	NATURALVAR (number, U"Number", U"1")
+	NATURAL (number, U"Number", U"1")
 	OK
 DO
 	NUMBER_ONE (SSCP)
@@ -5951,7 +5937,7 @@ DIRECT (REAL_SSCP_getLnDeterminant) {
 }
 
 FORM (REAL_SSCP_testDiagonality_bartlett, U"SSCP: Get diagonality (bartlett)", U"SSCP: Get diagonality (bartlett)...") {
-	NATURALVAR (numberOfConstraints, U"Number of constraints", U"1")
+	NATURAL (numberOfConstraints, U"Number of constraints", U"1")
 	OK
 DO
 	NUMBER_ONE (SSCP)
@@ -5967,7 +5953,7 @@ DIRECT (NEW_SSCP_to_Correlation) {
 }
 
 FORM (NEW_SSCP_to_Covariance, U"SSCP: To Covariance", U"SSCP: To Covariance...") {
-	NATURALVAR (numberOfConstraints, U"Number of constraints", U"1")
+	NATURAL (numberOfConstraints, U"Number of constraints", U"1")
 	OK
 DO
 	CONVERT_EACH (SSCP)
@@ -5988,7 +5974,7 @@ DIRECT (NEW_SSCP_to_PCA) {
 //END }
 
 FORM (NEW1_Strings_createAsCharacters, U"Strings: Create as characters", nullptr) {
-	SENTENCEVAR (text, U"Text", U"intention")
+	SENTENCE (text, U"Text", U"intention")
 	OK
 DO
 	CREATE_ONE
@@ -5997,7 +5983,7 @@ DO
 }
 
 FORM (NEW1_old_Strings_createAsTokens, U"Strings: Create as tokens", nullptr) {
-	TEXTVAR (text, U"Text", U"There are seven tokens in this text")
+	TEXTFIELD (text, U"Text", U"There are seven tokens in this text")
 	OK
 DO
 	CREATE_ONE
@@ -6006,8 +5992,8 @@ DO
 }
 
 FORM (NEW1_Strings_createAsTokens, U"Strings: Create as tokens", U"Create Strings as tokens...") {
-	TEXTVAR (text, U"Text", U"There are seven tokens in this text")
-	SENTENCEVAR (separators, U"Separators", U" ,")
+	TEXTFIELD (text, U"Text", U"There are seven tokens in this text")
+	SENTENCE (separators, U"Separators", U" ,")
 	OK
 DO_ALTERNATIVE (NEW1_old_Strings_createAsTokens)
 	CREATE_ONE
@@ -6028,10 +6014,10 @@ DIRECT (NEW_Strings_to_Categories) {
 }
 
 FORM (NEW_Strings_change, U"Strings: Change", U"Strings: Change") {
-	SENTENCEVAR (search_string, U"Search", U"a")
-	SENTENCEVAR (replace_string, U"Replace", U"a")
-	INTEGERVAR (replaceLimit, U"Replace limit", U"0 (= unlimited)")
-	RADIOVAR (stringType, U"Search and replace are:", 1)
+	SENTENCE (search_string, U"Search", U"a")
+	SENTENCE (replace_string, U"Replace", U"a")
+	INTEGER (replaceLimit, U"Replace limit", U"0 (= unlimited)")
+	RADIO (stringType, U"Search and replace are:", 1)
 	RADIOBUTTON (U"Literals")
 	RADIOBUTTON (U"Regular Expressions")
 	OK
@@ -6043,8 +6029,8 @@ DO
 }
 
 FORM (NEW_Strings_extractPart, U"Strings: Extract part", nullptr) {
-	NATURALVAR (fromIndex, U"From index", U"1")
-	NATURALVAR (toIndex, U"To index", U"1")
+	NATURAL (fromIndex, U"From index", U"1")
+	NATURAL (toIndex, U"To index", U"1")
 	OK
 DO
 	CONVERT_EACH (Strings)
@@ -6059,7 +6045,7 @@ DIRECT (NEW_Strings_to_EditDistanceTable) {
 }
 
 FORM (NEW_Strings_to_Permutation, U"Strings: To Permutation", U"Strings: To Permutation...") {
-	BOOLEANVAR (sort, U"Sort", true)
+	BOOLEAN (sort, U"Sort", true)
 	OK
 DO
 	CONVERT_EACH (Strings)
@@ -6074,8 +6060,8 @@ DIRECT (NEW1_Strings_and_Permutation_permuteStrings) {
 }
 
 FORM (NEW_SVD_to_TableOfReal, U"SVD: To TableOfReal", U"SVD: To TableOfReal...") {
-	NATURALVAR (fromComponent, U"First component", U"1")
-	INTEGERVAR (toComponent, U"Last component", U"0 (= all)")
+	NATURAL (fromComponent, U"First component", U"1")
+	INTEGER (toComponent, U"Last component", U"0 (= all)")
 	OK
 DO
 	CONVERT_EACH (SVD)
@@ -6123,17 +6109,17 @@ DIRECT (NEW1_Table_create_weenink1983) {
 }
 
 FORM (GRAPHICS_Table_scatterPlotWhere, U"Table: Scatter plot where", nullptr) {
-	WORDVAR (xColumn_string, U"Horizontal column", U"")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0 (= auto)")
-	WORDVAR (yColumn_string, U"Vertical column", U"")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0 (= auto)")
-	WORDVAR (markColumn_string, U"Column with marks", U"")
-	NATURALVAR (fontSize, U"Font size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	WORD (xColumn_string, U"Horizontal column", U"")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0 (= auto)")
+	WORD (yColumn_string, U"Vertical column", U"")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0 (= auto)")
+	WORD (markColumn_string, U"Column with marks", U"")
+	NATURAL (fontSize, U"Font size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"Use only data from rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6146,17 +6132,17 @@ DO
 }
 
 FORM (GRAPHICS_Table_scatterPlotMarkWhere, U"Scatter plot where (marks)", nullptr) {
-	WORDVAR (xColumn_string, U"Horizontal column", U"")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0 (= auto)")
-	WORDVAR (yColumn_string, U"Vertical column", U"")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0 (= auto)")
-	POSITIVEVAR (markSize_mm, U"Mark size (mm)", U"1.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
-	SENTENCEVAR (mark_string, U"Mark string (+xo.)", U"+")
+	WORD (xColumn_string, U"Horizontal column", U"")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0 (= auto)")
+	WORD (yColumn_string, U"Vertical column", U"")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0 (= auto)")
+	POSITIVE (markSize_mm, U"Mark size (mm)", U"1.0")
+	BOOLEAN (garnish, U"Garnish", true)
+	SENTENCE (mark_string, U"Mark string (+xo.)", U"+")
 	LABEL (U"", U"Use only data from rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6168,19 +6154,19 @@ DO
 }
 
 FORM (GRAPHICS_Table_barPlotWhere, U"Table: Bar plot where", U"Table: Bar plot where...") {
-	SENTENCEVAR (yColumns_string, U"Vertical column(s)", U"")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0 (= auto)")
-	SENTENCEVAR (markColumn_string, U"Column with labels", U"")
+	SENTENCE (yColumns_string, U"Vertical column(s)", U"")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0 (= auto)")
+	SENTENCE (markColumn_string, U"Column with labels", U"")
 	LABEL (U"", U"Distances are in units of 'bar width'")
-	REALVAR (distanceFromBorder, U"Distance of first bar from border", U"1.0")
-	REALVAR (distanceBetweenGroups, U"Distance between bar groups", U"1.0")
-	REALVAR (distanceWithinGroup, U"Distance between bars within group", U"0.0")
-	SENTENCEVAR (colours, U"Colours", U"Grey")
-	REALVAR (angle_degrees, U"Label text angle (degrees)", U"0.0");
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (distanceFromBorder, U"Distance of first bar from border", U"1.0")
+	REAL (distanceBetweenGroups, U"Distance between bar groups", U"1.0")
+	REAL (distanceWithinGroup, U"Distance between bars within group", U"0.0")
+	SENTENCE (colours, U"Colours", U"Grey")
+	REAL (angle_degrees, U"Label text angle (degrees)", U"0.0");
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"Use only data from rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"row >= 1 and row <= 8")
+	TEXTFIELD (formula, U"Formula", U"row >= 1 and row <= 8")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6189,17 +6175,17 @@ DO
 }
 
 FORM (GRAPHICS_Table_LineGraphWhere, U"Table: Line graph where", U"Table: Line graph where...") {
-	SENTENCEVAR (yColumn_string, U"Vertical column", U"")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0 (= auto)")
-	SENTENCEVAR (xColumn_string, U"Horizonal column", U"")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0 (= auto)")
-	WORDVAR (text, U"Text", U"+")
-	REALVAR (angle_degrees, U"Label text angle (degrees)", U"0.0");
-	BOOLEANVAR (garnish, U"Garnish", true)
+	SENTENCE (yColumn_string, U"Vertical column", U"")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0 (= auto)")
+	SENTENCE (xColumn_string, U"Horizonal column", U"")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0 (= auto)")
+	WORD (text, U"Text", U"+")
+	REAL (angle_degrees, U"Label text angle (degrees)", U"0.0");
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"Use only data from rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; (= everything)")
+	TEXTFIELD (formula, U"Formula", U"1; (= everything)")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6210,11 +6196,11 @@ DO
 }
 
 FORM (GRAPHICS_Table_boxPlots, U"Table: Box plots", nullptr) {
-	WORDVAR (dataColumns_string, U"Data columns", U"F1 F2")
-	WORDVAR (factorColumn_string, U"Factor column", U"Sex")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	WORD (dataColumns_string, U"Data columns", U"F1 F2")
+	WORD (factorColumn_string, U"Factor column", U"Sex")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true);
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6224,13 +6210,13 @@ DO
 }
 
 FORM (GRAPHICS_Table_boxPlotsWhere, U"Table: Box plots where", U"Table: Box plots where...") {
-	SENTENCEVAR (dataColumns_string, U"Data columns", U"F1 F2")
-	WORDVAR (factorColumn_string, U"Factor column", U"")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	SENTENCE (dataColumns_string, U"Data columns", U"F1 F2")
+	WORD (factorColumn_string, U"Factor column", U"")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true);
 	LABEL (U"", U"Use only data in rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6240,16 +6226,16 @@ DO
 }
 
 FORM (GRAPHICS_Table_drawEllipseWhere, U"Draw ellipse (standard deviation)", nullptr) {
-	WORDVAR (xColumn_string, U"Horizontal column", U"")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0 (= auto)")
-	WORDVAR (yColumn_string, U"Vertical column", U"")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0 (= auto)")
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"2.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	WORD (xColumn_string, U"Horizontal column", U"")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0 (= auto)")
+	WORD (yColumn_string, U"Vertical column", U"")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0 (= auto)")
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"2.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"Use only data in rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6261,16 +6247,16 @@ DO
 }
 
 FORM (GRAPHICS_Table_drawEllipses, U"Table: Draw ellipses", nullptr) {
-	WORDVAR (xColumn_string, U"Horizontal column", U"F2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0 (= auto)")
-	WORDVAR (yColumn_string, U"Vertical column", U"F1")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0 (= auto)")
-	WORDVAR (factorColumn_string, U"Factor column", U"Vowel")
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	INTEGERVAR (fontSize, U"Font size", U"12 (0 = no label)")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	WORD (xColumn_string, U"Horizontal column", U"F2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0 (= auto)")
+	WORD (yColumn_string, U"Vertical column", U"F1")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0 (= auto)")
+	WORD (factorColumn_string, U"Factor column", U"Vowel")
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"1.0")
+	INTEGER (fontSize, U"Font size", U"12 (0 = no label)")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6282,18 +6268,18 @@ DO
 }
 
 FORM (GRAPHICS_Table_drawEllipsesWhere, U"Table: Draw ellipses where", nullptr) {
-	WORDVAR (xColumn_string, U"Horizontal column", U"F2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0 (= auto)")
-	WORDVAR (yColumn_string, U"Vertical column", U"F1")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0 (= auto)")
-	WORDVAR (factorColumn_string, U"Factor column", U"Vowel")
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	INTEGERVAR (fontSize, U"Font size", U"12 (0 = no label)")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	WORD (xColumn_string, U"Horizontal column", U"F2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0 (= auto)")
+	WORD (yColumn_string, U"Vertical column", U"F1")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0 (= auto)")
+	WORD (factorColumn_string, U"Factor column", U"Vowel")
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"1.0")
+	INTEGER (fontSize, U"Font size", U"12 (0 = no label)")
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"Use only data in rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	
 	OK
 DO
@@ -6307,12 +6293,12 @@ DO
 
 
 FORM (GRAPHICS_Table_normalProbabilityPlot, U"Table: Normal probability plot", U"Table: Normal probability plot...") {
-	WORDVAR (column_string, U"Column", U"F1")
-	NATURALVAR (numberOfQuantiles, U"Number of quantiles", U"100")
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"0.0")
-	NATURALVAR (labelSize, U"Label size", U"12")
-	WORDVAR (label, U"Label", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	WORD (column_string, U"Column", U"F1")
+	NATURAL (numberOfQuantiles, U"Number of quantiles", U"100")
+	REAL (numberOfSigmas, U"Number of sigmas", U"0.0")
+	NATURAL (labelSize, U"Label size", U"12")
+	WORD (label, U"Label", U"+")
+	BOOLEAN (garnish, U"Garnish", true);
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6322,14 +6308,14 @@ DO
 }
 
 FORM (GRAPHICS_Table_normalProbabilityPlotWhere, U"Table: Normal probability plot where", U"Table: Normal probability plot...") {
-	WORDVAR (column_string, U"Column", U"F0")
-	NATURALVAR (numberOfQuantiles, U"Number of quantiles", U"100")
-	REALVAR (numberOfSigmas, U"Number of sigmas", U"0.0")
-	NATURALVAR (labelSize, U"Label size", U"12")
-	WORDVAR (label, U"Label", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	WORD (column_string, U"Column", U"F0")
+	NATURAL (numberOfQuantiles, U"Number of quantiles", U"100")
+	REAL (numberOfSigmas, U"Number of sigmas", U"0.0")
+	NATURAL (labelSize, U"Label size", U"12")
+	WORD (label, U"Label", U"+")
+	BOOLEAN (garnish, U"Garnish", true);
 	LABEL (U"", U"Use only data in rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6340,16 +6326,16 @@ DO
 }
 
 FORM (GRAPHICS_Table_quantileQuantilePlot, U"Table: Quantile-quantile plot", U"Table: Quantile-quantile plot...") {
-	WORDVAR (xColumn_string, U"Horizontal axis column", U"")
-	WORDVAR (yColumn_string, U"Vertical axis column", U"")
-	NATURALVAR (numberOfQuantiles, U"Number of quantiles", U"100")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	NATURALVAR (labelSize, U"Label size", U"12")
-	WORDVAR (label, U"Label", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	WORD (xColumn_string, U"Horizontal axis column", U"")
+	WORD (yColumn_string, U"Vertical axis column", U"")
+	NATURAL (numberOfQuantiles, U"Number of quantiles", U"100")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	NATURAL (labelSize, U"Label size", U"12")
+	WORD (label, U"Label", U"+")
+	BOOLEAN (garnish, U"Garnish", true);
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6360,18 +6346,18 @@ DO
 }
 
 FORM (GRAPHICS_Table_quantileQuantilePlot_betweenLevels, U"Table: Quantile-quantile plot (between levels)", U"Table: Quantile-quantile plot...") {
-	WORDVAR (dataColumn_string, U"Data column", U"F0")
-	WORDVAR (factorColumn_string, U"Factor column", U"Sex")
-	WORDVAR (xLevel_string, U"Horizontal factor level", U"")
-	WORDVAR (yLevelString, U"Vertical factor level", U"")
-	NATURALVAR (numberOfQuantiles, U"Number of quantiles", U"100")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	NATURALVAR (labelSize, U"Label size", U"12")
-	WORDVAR (label, U"Label", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	WORD (dataColumn_string, U"Data column", U"F0")
+	WORD (factorColumn_string, U"Factor column", U"Sex")
+	WORD (xLevel_string, U"Horizontal factor level", U"")
+	WORD (yLevelString, U"Vertical factor level", U"")
+	NATURAL (numberOfQuantiles, U"Number of quantiles", U"100")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	NATURAL (labelSize, U"Label size", U"12")
+	WORD (label, U"Label", U"+")
+	BOOLEAN (garnish, U"Garnish", true);
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6382,13 +6368,13 @@ DO
 }
 
 FORM (GRAPHICS_Table_lagPlot, U"Table: lag plot", nullptr) {
-	WORDVAR (dataColumn_string, U"Data column", U"errors")
-	NATURALVAR (lag, U"Lag", U"1")
-	REALVAR (fromXY, U"left Horizontal and vertical range", U"0.0")
-	REALVAR (toXY, U"right Horizontal and vertical range", U"0.0")
-	NATURALVAR (labelSize, U"Label size", U"12")
-	WORDVAR (label, U"Label", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	WORD (dataColumn_string, U"Data column", U"errors")
+	NATURAL (lag, U"Lag", U"1")
+	REAL (fromXY, U"left Horizontal and vertical range", U"0.0")
+	REAL (toXY, U"right Horizontal and vertical range", U"0.0")
+	NATURAL (labelSize, U"Label size", U"12")
+	WORD (label, U"Label", U"+")
+	BOOLEAN (garnish, U"Garnish", true);
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6399,15 +6385,15 @@ DO
 
 
 FORM (GRAPHICS_Table_lagPlotWhere, U"Table: lag plot where", nullptr) {
-	WORDVAR (dataColumn_string, U"Data column", U"errors")
-	NATURALVAR (lag, U"Lag", U"1")
-	REALVAR (fromXY, U"left Horizontal and vertical range", U"0.0")
-	REALVAR (toXY, U"right Horizontal and vertical range", U"0.0")
-	NATURALVAR (labelSize, U"Label size", U"12")
-	WORDVAR (label, U"Label", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	WORD (dataColumn_string, U"Data column", U"errors")
+	NATURAL (lag, U"Lag", U"1")
+	REAL (fromXY, U"left Horizontal and vertical range", U"0.0")
+	REAL (toXY, U"right Horizontal and vertical range", U"0.0")
+	NATURAL (labelSize, U"Label size", U"12")
+	WORD (label, U"Label", U"+")
+	BOOLEAN (garnish, U"Garnish", true);
 	LABEL (U"", U"Use only data in rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6417,14 +6403,14 @@ DO
 }
 
 FORM (GRAPHICS_Table_distributionPlot, U"Table: Distribution plot", nullptr) {
-	WORDVAR (dataColumn_string, U"Data column", U"data")
-	REALVAR (minimumValue, U"Minimum value", U"0.0")
-	REALVAR (maximumValue, U"Maximum value", U"0.0")
+	WORD (dataColumn_string, U"Data column", U"data")
+	REAL (minimumValue, U"Minimum value", U"0.0")
+	REAL (maximumValue, U"Maximum value", U"0.0")
 	LABEL (U"", U"Display of the distribution")
-	NATURALVAR (numberOfBins, U"Number of bins", U"10")
-	REALVAR (minimumFrequency, U"Minimum frequency", U"0.0")
-	REALVAR (maximumFrequency, U"Maximum frequency", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (numberOfBins, U"Number of bins", U"10")
+	REAL (minimumFrequency, U"Minimum frequency", U"0.0")
+	REAL (maximumFrequency, U"Maximum frequency", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6434,16 +6420,16 @@ DO
 }
 
 FORM (GRAPHICS_Table_distributionPlotWhere, U"Table: Distribution plot where", nullptr) {
-	WORDVAR (dataColumn_string, U"Data column", U"data")
-	REALVAR (minimumValue, U"Minimum value", U"0.0")
-	REALVAR (maximumValue, U"Maximum value", U"0.0")
+	WORD (dataColumn_string, U"Data column", U"data")
+	REAL (minimumValue, U"Minimum value", U"0.0")
+	REAL (maximumValue, U"Maximum value", U"0.0")
 	LABEL (U"", U"Display of the distribution")
-	NATURALVAR (numberOfBins, U"Number of bins", U"10")
-	REALVAR (minimumFrequency, U"Minimum frequency", U"0.0")
-	REALVAR (maximumFrequency, U"Maximum frequency", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (numberOfBins, U"Number of bins", U"10")
+	REAL (minimumFrequency, U"Minimum frequency", U"0.0")
+	REAL (maximumFrequency, U"Maximum frequency", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"Use only data in rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6453,16 +6439,16 @@ DO
 }
 
 FORM (GRAPHICS_Table_horizontalErrorBarsPlot, U"Table: Horizontal error bars plot", U"Table: Horizontal error bars plot...") {
-	WORDVAR (xColumn_string, U"Horizontal column", U"x")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	WORDVAR (yColumn_string, U"Vertical column", U"y")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	WORDVAR (lowerErrorColumn_string, U"Lower error value column", U"error1")
-	WORDVAR (upperErrorColumn_string, U"Upper error value column", U"error2")
-	REALVAR (barSize_mm, U"Bar size (mm)", U"1.0")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	WORD (xColumn_string, U"Horizontal column", U"x")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	WORD (yColumn_string, U"Vertical column", U"y")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	WORD (lowerErrorColumn_string, U"Lower error value column", U"error1")
+	WORD (upperErrorColumn_string, U"Upper error value column", U"error2")
+	REAL (barSize_mm, U"Bar size (mm)", U"1.0")
+	BOOLEAN (garnish, U"Garnish", true);
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6475,18 +6461,18 @@ DO
 }
 
 FORM (GRAPHICS_Table_horizontalErrorBarsPlotWhere, U"Table: Horizontal error bars plot where", U"Table: Horizontal error bars plot where...") {
-	WORDVAR (xColumn_string, U"Horizontal column", U"")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	WORDVAR (yColumn_string, U"Vertical column", U"")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	WORDVAR (lowerErrorColumn_string, U"Lower error value column", U"error1")
-	WORDVAR (upperErrorColumn_string, U"Upper error value column", U"error2")
-	REALVAR (barSize_mm, U"Bar size (mm)", U"1.0")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	WORD (xColumn_string, U"Horizontal column", U"")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	WORD (yColumn_string, U"Vertical column", U"")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	WORD (lowerErrorColumn_string, U"Lower error value column", U"error1")
+	WORD (upperErrorColumn_string, U"Upper error value column", U"error2")
+	REAL (barSize_mm, U"Bar size (mm)", U"1.0")
+	BOOLEAN (garnish, U"Garnish", true);
 	LABEL (U"", U"Use only data in rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6499,16 +6485,16 @@ DO
 }
 
 FORM (GRAPHICS_Table_verticalErrorBarsPlot, U"Table: Vertical error bars plot", U"Table: Vertical error bars plot...") {
-	WORDVAR (xColumn_string, U"Horizontal column", U"")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	WORDVAR (yColumn_string, U"Vertical column", U"")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	WORDVAR (lowerErrorColumn_string, U"Lower error value column", U"error1")
-	WORDVAR (upperErrorColumn_string, U"Upper error value column", U"error2")
-	REALVAR (barSize_mm, U"Bar size (mm)", U"1.0")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	WORD (xColumn_string, U"Horizontal column", U"")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	WORD (yColumn_string, U"Vertical column", U"")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	WORD (lowerErrorColumn_string, U"Lower error value column", U"error1")
+	WORD (upperErrorColumn_string, U"Upper error value column", U"error2")
+	REAL (barSize_mm, U"Bar size (mm)", U"1.0")
+	BOOLEAN (garnish, U"Garnish", true);
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6521,18 +6507,18 @@ DO
 }
 
 FORM (GRAPHICS_Table_verticalErrorBarsPlotWhere, U"Table: Vertical error bars plot where", U"Table: Vertical error bars plot where...") {
-	WORDVAR (xColumn_string, U"Horizontal column", U"")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	WORDVAR (yColumn_string, U"Vertical column", U"")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	WORDVAR (lowerErrorColumn_string, U"Lower error value column", U"error1")
-	WORDVAR (upperErrorColumn_string, U"Upper error value column", U"error2")
-	REALVAR (barSize_mm, U"Bar size (mm)", U"1.0")
-	BOOLEANVAR (garnish, U"Garnish", true);
+	WORD (xColumn_string, U"Horizontal column", U"")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	WORD (yColumn_string, U"Vertical column", U"")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	WORD (lowerErrorColumn_string, U"Lower error value column", U"error1")
+	WORD (upperErrorColumn_string, U"Upper error value column", U"error2")
+	REAL (barSize_mm, U"Bar size (mm)", U"1.0")
+	BOOLEAN (garnish, U"Garnish", true);
 	LABEL (U"", U"Use only data in rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -6546,7 +6532,7 @@ DO
 
 FORM (NEW_Table_extractRowsWhere, U"Table: Extract rows where", nullptr) {
 	LABEL (U"", U"Extract rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	OK
 DO
 	CONVERT_EACH (Table)
@@ -6555,22 +6541,22 @@ DO
 }
 
 FORM (NEW_Table_extractRowsMahalanobisWhere, U"Table: Extract rows where (mahalanobis)", nullptr) {
-	SENTENCEVAR (dataColumns_string, U"Extract all rows where columns...", U"F1 F2 F3")
-	RADIO_ENUM (U"...have a mahalanobis distance...", kMelder_number, GREATER_THAN)
-	REALVAR (numberOfSigmas, U"...the number", U"2.0")
-	WORDVAR (factorColumn_string, U"Factor column", U"")
+	SENTENCE (dataColumns_string, U"Extract all rows where columns...", U"F1 F2 F3")
+	RADIO_ENUM (haveAMahalanobisDistance, U"...have a mahalanobis distance...", kMelder_number, GREATER_THAN)
+	REAL (numberOfSigmas, U"...the number", U"2.0")
+	WORD (factorColumn_string, U"Factor column", U"")
 	LABEL (U"", U"Process only rows where the following condition holds:")
-	TEXTVAR (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
+	TEXTFIELD (formula, U"Formula", U"1; self$[\"gender\"]=\"male\"")
 	OK
 DO
 	CONVERT_EACH (Table)
-		autoTable result = Table_extractMahalanobisWhere(me, dataColumns_string, factorColumn_string, numberOfSigmas, GET_ENUM (kMelder_number, U"...have a mahalanobis distance..."), formula, interpreter);
+		autoTable result = Table_extractMahalanobisWhere(me, dataColumns_string, factorColumn_string, numberOfSigmas, haveAMahalanobisDistance, formula, interpreter);
 	CONVERT_EACH_END (my name, U"_mahalanobis")
 }
 
 FORM (NEW_Table_extractColumnRanges, U"Table: Extract column ranges", nullptr) {
 	LABEL (U"", U"Create a new Table from the following columns:")
-	TEXTVAR (columnRanges_string, U"Ranges", U"1 2")
+	TEXTFIELD (columnRanges_string, U"Ranges", U"1 2")
 	LABEL (U"", U"To supply rising or falling ranges, use e.g. 2:6 or 5:3.")
 	OK
 DO
@@ -6588,7 +6574,7 @@ DIRECT (NEW1_CreateIrisDataset) {
 }
 
 FORM (INFO_TableOfReal_reportMultivariateNormality, U"TableOfReal: Report multivariate normality (BHEP)", U"TableOfReal: Report multivariate normality (BHEP)...") {
-	REALVAR (h, U"Smoothing parameter", U"0.0")
+	REAL (h, U"Smoothing parameter", U"0.0")
 	OK
 DO
 	INFO_ONE (TableOfReal)
@@ -6626,7 +6612,7 @@ DIRECT (NEW1_TableOfReal_appendColumns) {
 }
 
 FORM (NEW1_TableOfReal_create_pols1973, U"Create TableOfReal (Pols 1973)", U"Create TableOfReal (Pols 1973)...") {
-	BOOLEANVAR (includeFormantAmplitudeLevels, U"Include formant levels", false)
+	BOOLEAN (includeFormantAmplitudeLevels, U"Include formant levels", false)
 	OK
 DO
 	CREATE_ONE
@@ -6647,7 +6633,7 @@ DIRECT (NEW_Table_create_ganong1980) {
 }
 
 FORM (NEW_TableOfReal_create_vanNierop1973, U"Create TableOfReal (Van Nierop 1973)...", U"Create TableOfReal (Van Nierop 1973)...") {
-	BOOLEANVAR (includeFormantAmplitudeLevels, U"Include formant levels", false)
+	BOOLEAN (includeFormantAmplitudeLevels, U"Include formant levels", false)
 	OK
 DO
 	CREATE_ONE
@@ -6656,7 +6642,7 @@ DO
 }
 
 FORM (NEW_TableOfReal_create_weenink1983, U"Create TableOfReal (Weenink 1985)...", U"Create TableOfReal (Weenink 1985)...") {
-	RADIOVAR (speakerGroup, U"Speakers group", 1)
+	RADIO (speakerGroup, U"Speakers group", 1)
 		RADIOBUTTON (U"Men")
 		RADIOBUTTON (U"Women")
 		RADIOBUTTON (U"Children")
@@ -6668,11 +6654,11 @@ DO
 }
 
 FORM (GRAPHICS_TableOfReal_drawAsScalableSquares, U"TableOfReal: Draw as scalable squares", 0)
-	REALVAR (zmin, U"left Value range", U"0.0");
-	REALVAR (zmax, U"right Value range", U"0.0");
-	POSITIVEVAR (scaleFactor, U"Cell size scale factor", U"0.95")
-	BOOLEANVAR (randomFill, U"Random fill", 0)
-	BOOLEANVAR (garnish, U"Garnish", 1)
+	REAL (zmin, U"left Value range", U"0.0");
+	REAL (zmax, U"right Value range", U"0.0");
+	POSITIVE (scaleFactor, U"Cell size scale factor", U"0.95")
+	BOOLEAN (randomFill, U"Random fill", false)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -6681,19 +6667,19 @@ DO
 
 FORM (GRAPHICS_TableOfReal_drawScatterPlot, U"TableOfReal: Draw scatter plot", U"TableOfReal: Draw scatter plot...") {
 	LABEL (U"", U"Select the part of the table")
-	NATURALVAR (xColumn, U"Horizontal axis column number", U"1")
-	NATURALVAR (yColumn, U"Vertical axis column number", U"2")
-	INTEGERVAR (fromRow, U"left Row number range", U"0")
-	INTEGERVAR (toRow, U"right Row number range", U"0")
+	NATURAL (xColumn, U"Horizontal axis column number", U"1")
+	NATURAL (yColumn, U"Vertical axis column number", U"2")
+	INTEGER (fromRow, U"left Row number range", U"0")
+	INTEGER (toRow, U"right Row number range", U"0")
 	LABEL (U"", U"Select the drawing area limits")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	NATURALVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (useRowLabels, U"Use row labels", false)
-	WORDVAR (label, U"Label", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	NATURAL (labelSize, U"Label size", U"12")
+	BOOLEAN (useRowLabels, U"Use row labels", false)
+	WORD (label, U"Label", U"+")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -6702,9 +6688,9 @@ DO
 }
 
 FORM (GRAPHICS_TableOfReal_drawScatterPlotMatrix, U"TableOfReal: Draw scatter plots matrix", nullptr) {
-	INTEGERVAR (fromColumn, U"From column", U"0")
-	INTEGERVAR (toColumn, U"To column", U"0")
-	POSITIVEVAR (fractionWhite, U"Fraction white", U"0.1")
+	INTEGER (fromColumn, U"From column", U"0")
+	INTEGER (toColumn, U"To column", U"0")
+	POSITIVE (fractionWhite, U"Fraction white", U"0.1")
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -6714,13 +6700,13 @@ DO
 
 FORM (GRAPHICS_TableOfReal_drawBiplot, U"TableOfReal: Draw biplot", U"TableOfReal: Draw biplot...") {
 	LABEL (U"", U"")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	REALVAR (splitFactor, U"Split factor", U"0.5")
-	INTEGERVAR (labelSize, U"Label size", U"10")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	REAL (splitFactor, U"Split factor", U"0.5")
+	INTEGER (labelSize, U"Label size", U"10")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -6730,21 +6716,21 @@ DO
 
 FORM (GRAPHICS_TableOfReal_drawVectors, U"Draw vectors", U"TableOfReal: Draw vectors...") {
 	LABEL (U"", U"From (x1, y1) to (x2, y2)")
-	NATURALVAR (x1Column, U"X1 column", U"1")
-	NATURALVAR (y1Column, U"Y1 column", U"2")
-	NATURALVAR (x2Column, U"X2 column", U"3")
-	NATURALVAR (y2Column, U"Y2 column", U"4")
+	NATURAL (x1Column, U"X1 column", U"1")
+	NATURAL (y1Column, U"Y1 column", U"2")
+	NATURAL (x2Column, U"X2 column", U"3")
+	NATURAL (y2Column, U"Y2 column", U"4")
 	LABEL (U"", U"Select the drawing area")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	RADIOVAR (vectorType, U"Vector type", 1)
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	RADIO (vectorType, U"Vector type", 1)
 		RADIOBUTTON (U"Arrow")
 		RADIOBUTTON (U"Double arrow")
 		RADIOBUTTON (U"Line")
-	INTEGERVAR (labelSize, U"Label size", U"10")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (labelSize, U"Label size", U"10")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -6754,17 +6740,17 @@ DO
 
 FORM (GRAPHICS_TableOfReal_drawRowAsHistogram, U"Draw row as histogram", U"TableOfReal: Draw rows as histogram...") {
 	LABEL (U"", U"Select from the table")
-	WORDVAR (rowNumber, U"Row number", U"1")
-	INTEGERVAR (fromColumn, U"left Column range", U"0")
-	INTEGERVAR (toColumn, U"right Column range", U"0")
+	WORD (rowNumber, U"Row number", U"1")
+	INTEGER (fromColumn, U"left Column range", U"0")
+	INTEGER (toColumn, U"right Column range", U"0")
 	LABEL (U"", U"Vertical drawing range")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
 	LABEL (U"", U"Offset and distance in units of 'bar width'")
-	REALVAR (xOffset, U"Horizontal offset", U"0.5")
-	REALVAR (distanceBetweenBars, U"Distance between bars", U"1.0")
-	WORDVAR (greys, U"Grey value (1=white)", U"0.7")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xOffset, U"Horizontal offset", U"0.5")
+	REAL (distanceBetweenBars, U"Distance between bars", U"1.0")
+	WORD (greys, U"Grey value (1=white)", U"0.7")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -6774,18 +6760,18 @@ DO
 
 FORM (GRAPHICS_TableOfReal_drawRowsAsHistogram, U"Draw rows as histogram", U"TableOfReal: Draw rows as histogram...") {
 	LABEL (U"", U"Select from the table")
-	SENTENCEVAR (rowNumbers_string, U"Row numbers", U"1 2")
-	INTEGERVAR (fromColumn, U"left Column range", U"0")
-	INTEGERVAR (toColumn, U"right Column range", U"0")
+	SENTENCE (rowNumbers_string, U"Row numbers", U"1 2")
+	INTEGER (fromColumn, U"left Column range", U"0")
+	INTEGER (toColumn, U"right Column range", U"0")
 	LABEL (U"", U"Vertical drawing range")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
 	LABEL (U"", U"Offset and distance in units of 'bar width'")
-	REALVAR (xOffset, U"Horizontal offset", U"1.0")
-	REALVAR (distanceBetweenBarGroups, U"Distance between bar groups", U"1.0")
-	REALVAR (distanceBetweenBars, U"Distance between bars", U"0.0")
-	SENTENCEVAR (greys_string, U"Grey values (1=white)", U"1 1")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xOffset, U"Horizontal offset", U"1.0")
+	REAL (distanceBetweenBarGroups, U"Distance between bar groups", U"1.0")
+	REAL (distanceBetweenBars, U"Distance between bars", U"0.0")
+	SENTENCE (greys_string, U"Grey values (1=white)", U"1 1")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -6794,13 +6780,13 @@ DO
 }
 
 FORM (GRAPHICS_TableOfReal_drawBoxPlots, U"TableOfReal: Draw box plots", U"TableOfReal: Draw box plots...") {
-	INTEGERVAR (fromRow, U"From row", U"0")
-	INTEGERVAR (toRow, U"To row", U"0")
-	INTEGERVAR (fromColumn, U"From column", U"0")
-	INTEGERVAR (toColumn, U"To column", U"0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (fromRow, U"From row", U"0")
+	INTEGER (toRow, U"To row", U"0")
+	INTEGER (fromColumn, U"From column", U"0")
+	INTEGER (toColumn, U"To column", U"0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -6809,13 +6795,13 @@ DO
 }
 
 FORM (GRAPHICS_TableOfReal_drawColumnAsDistribution, U"TableOfReal: Draw column as distribution", U"TableOfReal: Draw column as distribution...") {
-	NATURALVAR (columnNumber, U"Column number", U"1")
-	REALVAR (fromValue, U"left Value range", U"0.0")
-	REALVAR (toValue, U"right Value range", U"0.0")
-	REALVAR (fromFrequency, U"left Frequency range", U"0.0")
-	REALVAR (toFrequency, U"right frequency range", U"0.0")
-	NATURALVAR (numberOfBins, U"Number of bins", U"10")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (columnNumber, U"Column number", U"1")
+	REAL (fromValue, U"left Value range", U"0.0")
+	REAL (toValue, U"right Value range", U"0.0")
+	REAL (fromFrequency, U"left Frequency range", U"0.0")
+	REAL (toFrequency, U"right frequency range", U"0.0")
+	NATURAL (numberOfBins, U"Number of bins", U"10")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -6824,7 +6810,7 @@ DO
 }
 
 FORM (NEW_TableOfReal_to_Configuration_lda, U"TableOfReal: To Configuration (lda)", U"TableOfReal: To Configuration (lda)...") {
-	INTEGERVAR (numberOfDimensions, U"Number of dimensions", U"0 (= all)")
+	INTEGER (numberOfDimensions, U"Number of dimensions", U"0 (= all)")
 	OK
 DO
 	REQUIRE (numberOfDimensions >= 0, U"Number of dimensions must be greater equal zero.")
@@ -6834,20 +6820,20 @@ DO
 }
 
 FORM (NEW_TableOfReal_to_CCA, U"TableOfReal: To CCA", U"TableOfReal: To CCA...") {
-	NATURAL (U"Dimension of dependent variate", U"2")
+	NATURAL (dimensionOfDependentVariate, U"Dimension of dependent variate", U"2")
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
-		autoCCA result = TableOfReal_to_CCA (me, GET_INTEGER (U"Dimension of dependent variate"));
+		autoCCA result = TableOfReal_to_CCA (me, dimensionOfDependentVariate);
 	CONVERT_EACH_END (my name)
 }
 
 FORM (NEW_TableOfReal_to_Configuration_pca, U"TableOfReal: To Configuration (pca)", U"TableOfReal: To Configuration (pca)...") {
-	NATURAL (U"Number of dimensions", U"2")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
-		autoConfiguration result = TableOfReal_to_Configuration_pca (me, GET_INTEGER (U"Number of dimensions"));
+		autoConfiguration result = TableOfReal_to_Configuration_pca (me, numberOfDimensions);
 	CONVERT_EACH_END (my name, U"_pca")
 }
 
@@ -6864,10 +6850,10 @@ DIRECT (NEW_TableOfReal_to_PCA_byRows) {
 }
 
 FORM (NEW_TableOfReal_to_SSCP, U"TableOfReal: To SSCP", U"TableOfReal: To SSCP...") {
-	INTEGERVAR (fromRow, U"Begin row", U"0")
-	INTEGERVAR (toRow, U"End row", U"0")
-	INTEGERVAR (fromColumn, U"Begin column", U"0")
-	INTEGERVAR (toColumn, U"End column", U"0")
+	INTEGER (fromRow, U"Begin row", U"0")
+	INTEGER (toRow, U"End row", U"0")
+	INTEGER (fromColumn, U"Begin column", U"0")
+	INTEGER (toColumn, U"End column", U"0")
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
@@ -6913,11 +6899,11 @@ DIRECT (NEW1_TablesOfReal_to_Eigen_gsvd) {
 }
 
 FORM (NEW1_TableOfReal_and_TableOfReal_crossCorrelations, U"TableOfReal & TableOfReal: Cross-correlations", nullptr) {
-	OPTIONMENUVAR (between, U"Correlations between", 1)
+	OPTIONMENU (between, U"Correlations between", 1)
 		OPTION (U"Rows")
 		OPTION (U"Columns")
-	BOOLEANVAR (center, U"Center", false)
-	BOOLEANVAR (normalize, U"Normalize", false)
+	BOOLEAN (center, U"Center", false)
+	BOOLEAN (normalize, U"Normalize", false)
 	OK
 DO
 	int by_columns = between - 1;
@@ -6939,8 +6925,8 @@ DIRECT (NEW1_TablesOfReal_to_GSVD) {
 }
 
 FORM (NEW_TableOfReal_choleskyDecomposition, U"TableOfReal: Cholesky decomposition", nullptr) {
-	BOOLEANVAR (wantUpper, U"Upper (else L)", 0)
-	BOOLEANVAR (wantInverse, U"Inverse", 0)
+	BOOLEAN (wantUpper, U"Upper (else L)", false)
+	BOOLEAN (wantInverse, U"Inverse", false)
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
@@ -6949,10 +6935,10 @@ DO
 }
 
 FORM (NEWMANY_TableOfReal_to_PatternList_and_Categories, U"TableOfReal: To PatternList and Categories", U"TableOfReal: To PatternList and Categories...") {
-	INTEGERVAR (fromRow, U"left Row range", U"0")
-	INTEGERVAR (toRow, U"right Row range", U"0 (= all)")
-	INTEGERVAR (fromColumn, U"left Column range", U"0")
-	INTEGERVAR (toColumn, U"right Column range", U"0 (= all)")
+	INTEGER (fromRow, U"left Row range", U"0")
+	INTEGER (toRow, U"right Row range", U"0 (= all)")
+	INTEGER (fromColumn, U"left Column range", U"0")
+	INTEGER (toColumn, U"right Column range", U"0 (= all)")
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
@@ -6964,7 +6950,7 @@ DO
 }
 
 FORM (REAL_TableOfReal_getColumnSum, U"TableOfReal: Get column sum", U"") {
-	INTEGERVAR (columnNumber, U"Column", U"1")
+	INTEGER (columnNumber, U"Column", U"1")
 	OK
 DO
 	NUMBER_ONE (TableOfReal)
@@ -6973,7 +6959,7 @@ DO
 }
 
 FORM (REAL_TableOfReal_getRowSum, U"TableOfReal: Get row sum", U"") {
-	INTEGERVAR (rowNumber, U"Row", U"1")
+	INTEGER (rowNumber, U"Row", U"1")
 	OK
 DO
 	NUMBER_ONE (TableOfReal)
@@ -6988,20 +6974,20 @@ DIRECT (REAL_TableOfReal_getGrandSum) {
 }
 
 FORM (NEW_TableOfReal_meansByRowLabels, U"TableOfReal: Means by row labels", U"TableOfReal: To TableOfReal (means by row labels)...") {
-	BOOLEANVAR (wantExpand, U"Expand", 0)
+	BOOLEAN (expand, U"Expand", false)
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
-		autoTableOfReal result = TableOfReal_meansByRowLabels (me, wantExpand, 0);
+		autoTableOfReal result = TableOfReal_meansByRowLabels (me, expand, 0);
 	CONVERT_EACH_END (my name, U"_byrowlabels")
 }
 
 FORM (NEW_TableOfReal_mediansByRowLabels, U"TableOfReal: Medians by row labels", U"TableOfReal: To TableOfReal (medians by row labels)...") {
-	BOOLEANVAR (wantExpand, U"Expand", 0)
+	BOOLEAN (expand, U"Expand", false)
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
-		autoTableOfReal result = TableOfReal_meansByRowLabels (me, wantExpand, 1);
+		autoTableOfReal result = TableOfReal_meansByRowLabels (me, expand, 1);
 	CONVERT_EACH_END (my name, U"_byrowlabels")
 }
 
@@ -7009,25 +6995,25 @@ DO
 
 FORM (MODIFY_TextGrid_extendTime, U"TextGrid: Extend time", U"TextGrid: Extend time...") {
 	LABEL (U"", U"")
-	POSITIVEVAR (extension_s, U"Extend domain by (s)", U"1.0")
-	RADIOVAR (position, U"At", 1)
-	RADIOBUTTON (U"End")
-	RADIOBUTTON (U"Start")
+	POSITIVE (extendDomainBy, U"Extend domain by (s)", U"1.0")
+	RADIO (position, U"At", 1)
+		RADIOBUTTON (U"End")
+		RADIOBUTTON (U"Start")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
-		TextGrid_extendTime (me,extension_s, position - 1);
+		TextGrid_extendTime (me, extendDomainBy, position - 1);
 	MODIFY_EACH_END
 }
 
 FORM (MODIFY_TextGrid_replaceIntervalTexts, U"TextGrid: Replace interval text", U"TextGrid: Replace interval text...") {
 	LABEL (U"", U"")
-	NATURALVAR (tierNumber, U"Tier number", U"1")
-	INTEGERVAR (fromInterval, U"left Interval range", U"0")
-	INTEGERVAR (toInterval, U"right Interval range", U"0")
-	SENTENCEVAR (search_string, U"Search", U"a")
-	SENTENCEVAR (replace_string, U"Replace", U"a")
-	RADIOVAR (searchType, U"Search and replace strings are:", 1)
+	NATURAL (tierNumber, U"Tier number", U"1")
+	INTEGER (fromInterval, U"left Interval range", U"0")
+	INTEGER (toInterval, U"right Interval range", U"0")
+	SENTENCE (search_string, U"Search", U"a")
+	SENTENCE (replace_string, U"Replace", U"a")
+	RADIO (searchType, U"Search and replace strings are:", 1)
 		RADIOBUTTON (U"Literals")
 		RADIOBUTTON (U"Regular Expressions")
 	OK
@@ -7040,12 +7026,12 @@ DO
 
 FORM (MODIFY_TextGrid_replacePointTexts, U"TextGrid: Replace point text", U"TextGrid: Replace point text...") {
 	LABEL (U"", U"")
-	NATURALVAR (tierNumber, U"Tier number", U"1")
-	INTEGERVAR (fromInterval, U"left Interval range", U"0")
-	INTEGERVAR (toInterval, U"right Interval range", U"0")
-	SENTENCEVAR (search_string, U"Search", U"a")
-	SENTENCEVAR (replace_string, U"Replace", U"a")
-	RADIOVAR (searchType, U"Search and replace strings are:", 1)
+	NATURAL (tierNumber, U"Tier number", U"1")
+	INTEGER (fromInterval, U"left Interval range", U"0")
+	INTEGER (toInterval, U"right Interval range", U"0")
+	SENTENCE (search_string, U"Search", U"a")
+	SENTENCE (replace_string, U"Replace", U"a")
+	RADIO (searchType, U"Search and replace strings are:", 1)
 		RADIOBUTTON (U"Literals")
 		RADIOBUTTON (U"Regular Expressions")
 	OK
@@ -7057,8 +7043,8 @@ DO
 }
 
 FORM (NEW1_TextGrids_to_Table_textAlignmentment, U"TextGrids: To Table (text alignment)", nullptr) {
-	NATURALVAR (targetTierNumber, U"Target tier", U"1")
-	NATURALVAR (sourceTierNumber, U"Source tier", U"1")
+	NATURAL (targetTierNumber, U"Target tier", U"1")
+	NATURAL (sourceTierNumber, U"Source tier", U"1")
 	OK
 DO
 	CONVERT_COUPLE (TextGrid)
@@ -7067,12 +7053,12 @@ DO
 }
 
 FORM (NEW_TextGrid_to_DurationTier, U"TextGrid: To DurationTier", U"TextGrid: To DurationTier...") {
-	NATURALVAR (tierNumber, U"Tier number", U"1")
-	POSITIVEVAR (timeScaleFactor, U"Time scale factor", U"2.0")
-	POSITIVEVAR (leftTransitionDuration, U"Left transition duration (s)", U"1e-10")
-	POSITIVEVAR (rightTransitionDuration, U"Right transition duration (s)", U"1e-10")
-	OPTIONMENU_ENUM4 (scaleIntervalsWhoseLabel___, U"Scale intervals whose label... ", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"hi")
+	NATURAL (tierNumber, U"Tier number", U"1")
+	POSITIVE (timeScaleFactor, U"Time scale factor", U"2.0")
+	POSITIVE (leftTransitionDuration, U"Left transition duration (s)", U"1e-10")
+	POSITIVE (rightTransitionDuration, U"Right transition duration (s)", U"1e-10")
+	OPTIONMENU_ENUM (scaleIntervalsWhoseLabel___, U"Scale intervals whose label... ", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
 	OK
 DO
 	CONVERT_EACH (TextGrid)
@@ -7088,8 +7074,8 @@ DIRECT (NEW_TextGrid_and_DurationTier_to_TextGrid) {
 }
 
 FORM (NEW1_TextGrids_and_EditCostsTable_to_Table_textAlignmentment, U"TextGrids & EditCostsTable: To Table(text alignmentment)", nullptr) {
-	NATURALVAR (targetTierNumber, U"Target tier", U"1")
-	NATURALVAR (sourceTierNumber, U"Source tier", U"1")
+	NATURAL (targetTierNumber, U"Target tier", U"1")
+	NATURAL (sourceTierNumber, U"Source tier", U"1")
 	OK
 DO
 	CONVERT_COUPLE_AND_ONE (TextGrid, EditCostsTable)
@@ -7098,8 +7084,8 @@ DO
 }
 
 FORM (MODIFY_TextGrid_setTierName, U"TextGrid: Set tier name", U"TextGrid: Set tier name...") {
-	NATURALVAR (tierNUmber, U"Tier number:", U"1")
-	SENTENCEVAR (name, U"Name", U"");
+	NATURAL (tierNUmber, U"Tier number:", U"1")
+	SENTENCE (name, U"Name", U"");
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -7125,7 +7111,7 @@ DIRECT (WINDOW_VowelEditor_create) {
 	vowelEditor.releaseToUser();
 END }
 
-static autoDaata cmuAudioFileRecognizer (int nread, const char *header, MelderFile file) {
+static autoDaata cmuAudioFileRecognizer (integer nread, const char *header, MelderFile file) {
 	return nread < 12 || header [0] != 6 || header [1] != 0 ?
 	       autoSound () : Sound_readFromCmuAudioFile (file);
 }
@@ -7302,9 +7288,9 @@ static void praat_SSCP_extract_init (ClassInfo klas) {
 }
 
 FORM (MODIFY_SSCP_setValue, U"Covariance: Set value", U"Covariance: Set value...") {
-	NATURALVAR (rowNumber, U"Row number", U"1")
-	NATURALVAR (columnNumber, U"Column number", U"1")
-	REALVAR (value, U"New value", U"1.0")
+	NATURAL (rowNumber, U"Row number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
+	REAL (value, U"New value", U"1.0")
 	OK
 DO
 	MODIFY_EACH (SSCP)
@@ -7313,8 +7299,8 @@ DO
 }
 
 FORM (MODIFY_SSCP_setCentroid, U"", nullptr) {
-	NATURALVAR (elementNumber, U"Element number", U"1")
-	REALVAR (value, U"New value", U"1.0")
+	NATURAL (elementNumber, U"Element number", U"1")
+	REAL (value, U"New value", U"1.0")
 	OK
 DO
 	MODIFY_EACH (SSCP)
diff --git a/dwtools/praat_HMM_init.cpp b/dwtools/praat_HMM_init.cpp
index db5c65a..73713b9 100644
--- a/dwtools/praat_HMM_init.cpp
+++ b/dwtools/praat_HMM_init.cpp
@@ -23,7 +23,7 @@
 #include "TableOfReal.h"
 
 #define GaussianMixture_OPTION_MENU_CRITERIA \
-	OPTIONMENUVAR (criterion, U"Criterion based on", 1) \
+	OPTIONMENU (criterion, U"Criterion based on", 1) \
 		OPTION (U"Likelihood") \
 		OPTION (U"Message length") \
 		OPTION (U"Bayes information") \
@@ -36,16 +36,16 @@ DIRECT (HELP_GaussianMixture_help) {
 }
 
 FORM (GRAPHICS_GaussianMixture_drawConcentrationEllipses, U"GaussianMixture: Draw concentration ellipses", U"GaussianMixture: Draw concentration ellipses...") {
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	BOOLEANVAR (principalComponentPlane, U"Principal component plane", true)
-	INTEGERVAR (xDimension, U"X-dimension", U"1")
-	INTEGERVAR (yDimension, U"Y-dimension", U"2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	INTEGERVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"1.0")
+	BOOLEAN (principalComponentPlane, U"Principal component plane", true)
+	INTEGER (xDimension, U"X-dimension", U"1")
+	INTEGER (yDimension, U"Y-dimension", U"2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	INTEGER (labelSize, U"Label size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (GaussianMixture)
@@ -54,15 +54,15 @@ DO
 }
 
 FORM (GRAPHICS_GaussianMixture_and_PCA_drawConcentrationEllipses, U"GaussianMixture & PCA: Draw concentration ellipses", U"GaussianMixture & PCA: Draw concentration ellipses...") {
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
-	INTEGERVAR (xDimension, U"X-dimension", U"1")
-	INTEGERVAR (yDimension, U"Y-dimension", U"2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	INTEGERVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"1.0")
+	INTEGER (xDimension, U"X-dimension", U"1")
+	INTEGER (yDimension, U"Y-dimension", U"2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	INTEGER (labelSize, U"Label size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (GaussianMixture, PCA)
@@ -71,14 +71,14 @@ DO
 }
 
 FORM (GRAPHICS_GaussianMixture_drawMarginalPdf, U"GaussianMixture: Draw marginal pdf", U"GaussianMixture: Draw marginal pdf...") {
-	INTEGERVAR (xDimension, U"X-dimension", U"1")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	NATURALVAR (numberOfPoints, U"Number of points", U"500")
-	INTEGERVAR (numberOfBins, U"Number of bins", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (xDimension, U"X-dimension", U"1")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	NATURAL (numberOfPoints, U"Number of points", U"500")
+	INTEGER (numberOfBins, U"Number of bins", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (GaussianMixture)
@@ -99,7 +99,7 @@ DIRECT (INTEGER_GaussianMixture_getDimensionOfComponent) {
 }
 
 FORM (REAL_GaussianMixture_getProbabilityAtPosition, U"GaussianMixture: Get probability at position", nullptr) {
-	SENTENCEVAR (position_string, U"Position", U"100.0 300.0")
+	SENTENCE (position_string, U"Position", U"100.0 300.0")
 	OK
 DO
 	NUMBER_ONE (GaussianMixture)
@@ -108,7 +108,7 @@ DO
 }
 
 FORM (MODIFY_GaussianMixture_splitComponent, U"GaussianMixture: Split component", U"GaussianMixture: Split component...") {
-	NATURALVAR (component, U"Component", U"1")
+	NATURAL (component, U"Component", U"1")
 	OK
 DO
 	MODIFY_EACH (GaussianMixture)
@@ -117,14 +117,14 @@ DO
 }
 
 FORM (GRAPHICS_GaussianMixture_and_PCA_drawMarginalPdf, U"GaussianMixture & PCA: Draw pdf function", U"GaussianMixture: Draw marginal pdf...") {
-	INTEGERVAR (xDimension, U"X-dimension", U"1")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	NATURALVAR (numberOfPoints, U"Number of points", U"500")
-	INTEGERVAR (numberOfBins, U"Number of bins", U"0.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (xDimension, U"X-dimension", U"1")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	NATURAL (numberOfPoints, U"Number of points", U"500")
+	INTEGER (numberOfBins, U"Number of bins", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (GaussianMixture, PCA)
@@ -133,14 +133,14 @@ DO
 }
 
 FORM (NEW1_GaussianMixture_and_PCA_to_Matrix_density, U"GaussianMixture & PCA: To Matrix density", U"GaussianMixture & PCA: To Matrix (density)...") {
-	INTEGERVAR (xDimension, U"X-dimension", U"1")
-	INTEGERVAR (yDimension, U"Y-dimension", U"2")
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"0.0")
-	NATURALVAR (numberOfColumns, U"Number of columns", U"100")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"0.0")
-	NATURALVAR (numberOfRows, U"Number of rows", U"100")
+	INTEGER (xDimension, U"X-dimension", U"1")
+	INTEGER (yDimension, U"Y-dimension", U"2")
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"0.0")
+	NATURAL (numberOfColumns, U"Number of columns", U"100")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"0.0")
+	NATURAL (numberOfRows, U"Number of rows", U"100")
 	OK
 DO
 	CONVERT_TWO (GaussianMixture, PCA)
@@ -149,7 +149,7 @@ DO
 }
 
 FORM (NEW_GaussianMixture_extractComponent, U"GaussianMixture: Extract component", nullptr) {
-	NATURALVAR (component, U"Component", U"1")
+	NATURAL (component, U"Component", U"1")
 	OK
 DO
 	CONVERT_EACH (GaussianMixture)
@@ -176,7 +176,7 @@ DIRECT (NEW_GaussianMixture_to_PCA) {
 }
 
 FORM (NEW_GaussianMixture_to_TableOfReal_randomSampling, U"GaussianMixture: To TableOfReal (random sampling)", U"GaussianMixture: To TableOfReal (random sampling)...") {
-	NATURALVAR (numberOfPoints, U"Number of data points", U"100")
+	NATURAL (numberOfPoints, U"Number of data points", U"100")
 	OK
 DO
 	CONVERT_EACH (GaussianMixture)
@@ -219,10 +219,10 @@ DIRECT (HELP_HMM_help) {
 }
 
 FORM (NEW1_HMM_create, U"Create HMM", nullptr) {
-	WORDVAR (name, U"Name", U"hmm")
-	BOOLEANVAR (leftToRightModel, U"Left to right model", false)
-	NATURALVAR (numberOfStates, U"Number of states", U"3")
-	NATURALVAR (numberOfObservations, U"Number of observations", U"3")
+	WORD (name, U"Name", U"hmm")
+	BOOLEAN (leftToRightModel, U"Left to right model", false)
+	NATURAL (numberOfStates, U"Number of states", U"3")
+	NATURAL (numberOfObservations, U"Number of observations", U"3")
 	OK
 DO
 	CREATE_ONE
@@ -231,10 +231,10 @@ DO
 }
 
 FORM (NEW1_HMM_createSimple, U"HMM: Create simple", U"HMM: Create simple HMM...") {
-	WORDVAR (name, U"Name", U"weather")
-	BOOLEANVAR (leftToRightModel, U"Left to right model", false)
-	SENTENCEVAR (states_string, U"States", U"Rainy Sunny")
-	SENTENCEVAR (observations_string, U"Observations", U"Walk Shop Clean")
+	WORD (name, U"Name", U"weather")
+	BOOLEAN (leftToRightModel, U"Left to right model", false)
+	SENTENCE (states_string, U"States", U"Rainy Sunny")
+	SENTENCE (observations_string, U"Observations", U"Walk Shop Clean")
 	OK
 DO
 	CREATE_ONE
@@ -243,14 +243,14 @@ DO
 }
 
 FORM (NEW1_HMM_createContinuousModel, U"HMM: Create continuous model", nullptr) {
-	WORDVAR (name, U"Name", U"cm")
-	BOOLEANVAR (leftToRightModel, U"Left to right model", false)
-	NATURALVAR (numberOfStates, U"Number of states", U"3")
-	NATURALVAR (numberOfSymbols, U"Number of symbols", U"10")
+	WORD (name, U"Name", U"cm")
+	BOOLEAN (leftToRightModel, U"Left to right model", false)
+	NATURAL (numberOfStates, U"Number of states", U"3")
+	NATURAL (numberOfSymbols, U"Number of symbols", U"10")
 	LABEL (U"", U"For the Gaussian mixtures:")
-	NATURALVAR (numberOfComponents, U"Number of components", U"3")
-	NATURALVAR (componentDimension, U"Dimension of component", U"39")
-	OPTIONMENUVAR (matricesType, U"Covariance matrices are", 1)
+	NATURAL (numberOfComponents, U"Number of components", U"3")
+	NATURAL (componentDimension, U"Dimension of component", U"39")
+	OPTIONMENU (matricesType, U"Covariance matrices are", 1)
 		OPTION (U"Complete")
 		OPTION (U"Diagonal")
 	OK
@@ -263,8 +263,8 @@ DO
 
 FORM (NEW_HMMObservationSequence_to_HMM, U"HMMObservationSequence: To HMM", nullptr) {
 	LABEL (U"", U"(0 states gives a non-hidden model) ")
-	INTEGERVAR (numberOfHiddenStates, U"Number of hidden states", U"2")
-	BOOLEANVAR (leftToRightModel, U"Left to right model", false)
+	INTEGER (numberOfHiddenStates, U"Number of hidden states", U"2")
+	BOOLEAN (leftToRightModel, U"Left to right model", false)
 	OK
 DO
 	CONVERT_EACH (HMMObservationSequence)
@@ -273,7 +273,7 @@ DO
 }
 
 FORM (GRAPHICS_HMM_draw, U"HMM: Draw", nullptr) {
-	BOOLEANVAR (garnish, U"Garnish", false)
+	BOOLEAN (garnish, U"Garnish", false)
 	OK
 DO
 	GRAPHICS_EACH (HMM)
@@ -282,8 +282,8 @@ DO
 }
 
 FORM (GRAPHICS_HMM_and_HMMStateSequence_drawTrellis, U"HMM & Strings: Draw trellis", nullptr) {
-	BOOLEANVAR (connect, U"Connect", true);
-	BOOLEANVAR (garnish, U"Garnish", true);
+	BOOLEAN (connect, U"Connect", true);
+	BOOLEAN (garnish, U"Garnish", true);
 	OK
 DO
 	GRAPHICS_TWO (HMM, HMMStateSequence)
@@ -307,8 +307,8 @@ DIRECT (GRAPHICS_HMM_drawForwardAndBackwardProbabilitiesIllustration) {
 END }
 
 FORM (REAL_HMM_getTransitionProbability, U"HMM: Get transition probability", U"HMM: Get transition probability...") {
-	NATURALVAR (fromState, U"From state number", U"1")
-	NATURALVAR (toState, U"To state number", U"1")
+	NATURAL (fromState, U"From state number", U"1")
+	NATURAL (toState, U"To state number", U"1")
 	OK
 DO
 	NUMBER_ONE (HMM)
@@ -318,8 +318,8 @@ DO
 }
 
 FORM (REAL_HMM_getEmissionProbability, U"HMM: Get emission probability", U"HMM: Get emission probability...") {
-	NATURALVAR (fromState, U"From state number", U"1")
-	NATURALVAR (toState, U"To state number", U"1")
+	NATURAL (fromState, U"From state number", U"1")
+	NATURAL (toState, U"To state number", U"1")
 	OK
 DO
 	NUMBER_ONE (HMM)
@@ -330,7 +330,7 @@ DO
 }
 
 FORM (REAL_HMM_getStartProbability, U"HMM: Get start probability", U"HMM: Get start probability...") {
-	NATURALVAR (stateNumber, U"State number", U"1")
+	NATURAL (stateNumber, U"State number", U"1")
 	OK
 DO
 	NUMBER_ONE (HMM)
@@ -341,8 +341,8 @@ DO
 
 FORM (REAL_HMM_getProbabilityAtTimeBeingInState, U"HMM: Get probability of being in state at time",
       U"HMM: Get p (time, state)...") {
-	NATURALVAR (timeIndex, U"Time index", U"10")
-	NATURALVAR (stateNumber, U"State number", U"1")
+	NATURAL (timeIndex, U"Time index", U"10")
+	NATURAL (stateNumber, U"State number", U"1")
 	OK
 DO
 	NUMBER_ONE (HMM)
@@ -351,9 +351,9 @@ DO
 }
 
 FORM (REAL_HMM_getProbabilityAtTimeBeingInStateEmittingSymbol, U"HMM: get probability being at time in state emitting symbol", U"HMM: Get p (time, state, symbol)...") {
-	NATURALVAR (timeIndex, U"Time index", U"10")
-	NATURALVAR (stateNumber, U"State number", U"1")
-	NATURALVAR (symbolNumber, U"Symbol number", U"1")
+	NATURAL (timeIndex, U"Time index", U"10")
+	NATURAL (stateNumber, U"State number", U"1")
+	NATURAL (symbolNumber, U"Symbol number", U"1")
 	OK
 DO
 	NUMBER_ONE (HMM)
@@ -362,8 +362,8 @@ DO
 }
 
 FORM (REAL_HMM_getProbabilityOfStayingInState, U"HMM: Get probability of staying in state", U"HMM: Get probability staying in state...") {
-	NATURALVAR (stateNumber, U"State number", U"1")
-	NATURALVAR (numberOfTimeUnits, U"Number of time units", U"2")
+	NATURAL (stateNumber, U"State number", U"1")
+	NATURAL (numberOfTimeUnits, U"Number of time units", U"2")
 	OK
 DO
 	NUMBER_ONE (HMM)
@@ -373,7 +373,7 @@ DO
 
 FORM (REAL_HMM_getExpectedValueOfDurationInState, U"HMM: Get expected value of duration in state",
       U"HMM: Get expected duration in state...") {
-	NATURALVAR (stateNumber, U"State number", U"1")
+	NATURAL (stateNumber, U"State number", U"1")
 	OK
 DO
 	NUMBER_ONE (HMM)
@@ -382,7 +382,7 @@ DO
 }
 
 FORM (INFO_HMM_getSymbolLabel, U"HMM: Get symbol label", nullptr) {
-	NATURALVAR (symbolNumber, U"Symbol number", U"1")
+	NATURAL (symbolNumber, U"Symbol number", U"1")
 	OK
 DO
 	STRING_ONE (HMM)
@@ -393,7 +393,7 @@ DO
 }
 
 FORM (INFO_HMM_getStateLabel, U"HMM: Get state label", nullptr) {
-	NATURALVAR (stateNumber, U"State number", U"1")
+	NATURAL (stateNumber, U"State number", U"1")
 	OK
 DO
 	STRING_ONE (HMM)
@@ -404,8 +404,8 @@ DO
 }
 
 FORM (REAL_HMM_and_HMM_getCrossEntropy, U"HMM & HMM: Get cross-entropy...", U"HMM & HMM: Get cross-entropy...") {
-	NATURALVAR (observationLength, U"Observation length", U"2000")
-	BOOLEANVAR (symmetric, U"Symmetric", true)
+	NATURAL (observationLength, U"Observation length", U"2000")
+	BOOLEAN (symmetric, U"Symmetric", true)
 	OK
 DO
 	NUMBER_COUPLE (HMM)
@@ -420,8 +420,8 @@ DIRECT (REAL_HMM_and_HMM_and_HMMObservationSequence_getCrossEntropy) {
 }
 
 FORM (NEW_HMM_to_HMMObservationSequence, U"HMM: To HMMObservationSequence (generate observations)", U"HMM: To HMMObservationSequence...") {
-	INTEGERVAR (startState, U"Start state", U"0")
-	NATURALVAR (numberOfObservations, U"Number of observations", U"20")
+	INTEGER (startState, U"Start state", U"0")
+	NATURAL (numberOfObservations, U"Number of observations", U"20")
 	OK
 DO
 	CONVERT_EACH (HMM)
@@ -460,9 +460,9 @@ DIRECT (NEW1_HMM_and_HMMObservationSequence_to_HMMStateSequence) {
 }
 
 FORM (MODIFY_HMM_and_HMMObservationSequence_learn, U"HMM & HMMObservationSequence: Learn", U"HMM & HMMObservationSequences: Learn...") {
-	POSITIVEVAR (relativePrecision_log, U"Relative precision in log(p)", U"0.001")
-	REALVAR (minimumProbability, U"Minimum probability", U"0.00000000001")
-	BOOLEANVAR (showProgress, U"Learning history in Info window", false)
+	POSITIVE (relativePrecision_log, U"Relative precision in log(p)", U"0.001")
+	REAL (minimumProbability, U"Minimum probability", U"0.00000000001")
+	BOOLEAN (showProgress, U"Learning history in Info window", false)
 	OK
 DO
 	REQUIRE (minimumProbability >= 0 && minimumProbability < 1, U"A probabilty must be >= 0 and < 1!")
@@ -472,8 +472,8 @@ DO
 }
 
 FORM (MODIFY_HMM_setTransitionProbabilities, U"HMM: Set transition probabilities", U"HMM: Set transition probabilities...") {
-	NATURALVAR (stateNumber, U"State number", U"1")
-	SENTENCEVAR (probabilities_string, U"Probabilities", U"0.1 0.9")
+	NATURAL (stateNumber, U"State number", U"1")
+	SENTENCE (probabilities_string, U"Probabilities", U"0.1 0.9")
 	OK
 DO
 	MODIFY_EACH (HMM)
@@ -482,8 +482,8 @@ DO
 }
 
 FORM (MODIFY_HMM_setEmissionProbabilities, U"HMM: Set emission probabilities", U"HMM: Set emission probabilities...") {
-	NATURALVAR (stateNumber, U"State number", U"1")
-	SENTENCEVAR (probabilities_string, U"Probabilities", U"0.1 0.7 0.2")
+	NATURAL (stateNumber, U"State number", U"1")
+	SENTENCE (probabilities_string, U"Probabilities", U"0.1 0.7 0.2")
 	OK
 DO
 	MODIFY_EACH (HMM)
@@ -492,7 +492,7 @@ DO
 }
 
 FORM (MODIFY_HMM_setStartProbabilities, U"HMM: Set start probabilities", U"HMM: Set start probabilities...") {
-	SENTENCEVAR (probabilities_string, U"Probabilities", U"0.1 0.9")
+	SENTENCE (probabilities_string, U"Probabilities", U"0.1 0.9")
 	OK
 DO
 	MODIFY_EACH (HMM)
@@ -513,7 +513,7 @@ DIRECT (NEW_HMM_extractEmissionProbabilities) {
 }
 
 FORM (NEW_HMMObservationSequence_to_TableOfReal, U"HMMObservationSequence: To TableOfReal ", U"HMMObservationSequence: To TableOfReal (bigrams)...") {
-	BOOLEANVAR (asProbabilities, U"As probabilities", true)
+	BOOLEAN (asProbabilities, U"As probabilities", true)
 	OK
 DO
 	CONVERT_EACH (HMMObservationSequence)
@@ -522,7 +522,7 @@ DO
 }
 
 FORM (NEW1_HMM_and_HMMObservationSequence_to_TableOfReal, U"HMM & HMMObservationSequence: To TableOfReal", U"HMM & HMMObservationSequence: To TableOfReal (bigrams)...") {
-	BOOLEANVAR (asProbabilities, U"As probabilities", true)
+	BOOLEAN (asProbabilities, U"As probabilities", true)
 	OK
 DO
 	CONVERT_TWO (HMM, HMMObservationSequence)
@@ -531,7 +531,7 @@ DO
 }
 
 FORM (NEW1_HMM_and_HMMStateSequence_to_TableOfReal, U"HMM & HMMStateSequence: To TableOfReal", nullptr) {
-	BOOLEANVAR (asProbabilities, U"As probabilities", true)
+	BOOLEAN (asProbabilities, U"As probabilities", true)
 	OK
 DO
 	CONVERT_TWO (HMM, HMMStateSequence)
@@ -540,7 +540,7 @@ DO
 }
 
 FORM (NEW_HMMStateSequence_to_TableOfReal, U"HMMStateSequence: To TableOfReal", nullptr) {
-	BOOLEANVAR (asProbabilities, U"As probabilities", true)
+	BOOLEAN (asProbabilities, U"As probabilities", true)
 	OK
 DO
 	CONVERT_EACH (HMMStateSequence)
@@ -567,7 +567,7 @@ DIRECT (NEW_HMMStateSequence_to_Strings) {
 }
 
 FORM (NEW_TableOfReal_to_GaussianMixture_fromRowlabels, U"TableOfReal: To GaussianMixture from row labels", U"TableOfReal: To GaussianMixture (row labels)...") {
-	OPTIONMENUVAR (matricesType, U"Covariance matrices are", 1)
+	OPTIONMENU (matricesType, U"Covariance matrices are", 1)
 		OPTION (U"Complete")
 		OPTION (U"Diagonal")
 	OK
@@ -578,11 +578,11 @@ DO
 }
 
 FORM (NEW_TableOfReal_to_GaussianMixture, U"TableOfReal: To GaussianMixture (no labels)", U"TableOfReal: To GaussianMixture...") {
-	NATURALVAR (numberOfComponents, U"Number of components", U"2")
-	POSITIVEVAR (tolerance, U"Tolerance of minimizer", U"0.001")
-	INTEGERVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"200")
-	REALVAR (lambda, U"Stability coefficient lambda", U"0.001")
-	OPTIONMENUVAR (matricesType, U"Covariance matrices are", 1)
+	NATURAL (numberOfComponents, U"Number of components", U"2")
+	POSITIVE (tolerance, U"Tolerance of minimizer", U"0.001")
+	INTEGER (maximumNumberOfIterations, U"Maximum number of iterations", U"200")
+	REAL (lambda, U"Stability coefficient lambda", U"0.001")
+	OPTIONMENU (matricesType, U"Covariance matrices are", 1)
 		OPTION (U"Complete")
 		OPTION (U"Diagonal")
 	GaussianMixture_OPTION_MENU_CRITERIA
@@ -595,9 +595,9 @@ DO
 }
 
 FORM (MODIFY_GaussianMixture_and_TableOfReal_improveLikelihood, U"GaussianMixture & TableOfReal: Improve likelihood", U"GaussianMixture & TableOfReal: Improve likelihood...") {
-	POSITIVEVAR (tolerance, U"Tolerance of minimizer", U"0.001")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"200")
-	REALVAR (lambda, U"Stability coefficient lambda", U"0.001")
+	POSITIVE (tolerance, U"Tolerance of minimizer", U"0.001")
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"200")
+	REAL (lambda, U"Stability coefficient lambda", U"0.001")
 	GaussianMixture_OPTION_MENU_CRITERIA
 	OK
 DO
@@ -610,10 +610,10 @@ DO
 }
 
 FORM (NEW1_GaussianMixture_and_TableOfReal_to_GaussianMixture_CEMM, U"GaussianMixture & TableOfReal: To GaussianMixture (CEMM)", U"GaussianMixture & TableOfReal: To GaussianMixture (CEMM)...") {
-	INTEGERVAR (minimumNumberOfComponents, U"Minimum number of components", U"1")
-	POSITIVEVAR (tolerance, U"Tolerance of minimizer", U"0.001")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"200")
-	REALVAR (lambda, U"Stability coefficient lambda (0-1)", U"0.001")
+	INTEGER (minimumNumberOfComponents, U"Minimum number of components", U"1")
+	POSITIVE (tolerance, U"Tolerance of minimizer", U"0.001")
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"200")
+	REAL (lambda, U"Stability coefficient lambda (0-1)", U"0.001")
 	GaussianMixture_OPTION_MENU_CRITERIA
 	OK
 DO
@@ -638,7 +638,7 @@ DIRECT (NEW1_GaussianMixture_and_TableOfReal_to_Correlation) {
 }
 
 FORM (NEW1_GaussianMixture_and_TableOfReal_to_TableOfReal_BHEPNormalityTests, U"GaussianMixture & TableOfReal: To TableOfReal BHEP normality tests", U"GaussianMixture & TableOfReal: To TableOfReal (BHEP normality tests)...") {
-	REALVAR (smoothingParameter, U"Smoothing parameter", U"1.41")
+	REAL (smoothingParameter, U"Smoothing parameter", U"1.41")
 	OK
 DO
 	CONVERT_TWO (GaussianMixture, TableOfReal)
diff --git a/dwtools/praat_KlattGrid_init.cpp b/dwtools/praat_KlattGrid_init.cpp
index 2f5b24a..b32ef84 100644
--- a/dwtools/praat_KlattGrid_init.cpp
+++ b/dwtools/praat_KlattGrid_init.cpp
@@ -35,14 +35,14 @@
 static const char32 *formant_names[] = { U"", U"oral ", U"nasal ", U"frication ", U"tracheal ", U"nasal anti", U"tracheal anti", U"delta "};
 
 #define KlattGrid_4formants_addCommonField(formantType) \
-	OPTIONMENUVAR (formantType, U"Formant type", 1) \
+	OPTIONMENU (formantType, U"Formant type", 1) \
 		OPTION (U"Normal formant") \
 		OPTION (U"Nasal formant") \
 		OPTION (U"Frication formant") \
 		OPTION (U"Tracheal formant")
 
 #define KlattGrid_6formants_addCommonField(formantType) \
-	OPTIONMENUVAR (formantType, U"Formant type", 1) \
+	OPTIONMENU (formantType, U"Formant type", 1) \
 		OPTION (U"Normal formant") \
 		OPTION (U"Nasal formant") \
 		OPTION (U"Frication formant") \
@@ -52,7 +52,7 @@ static const char32 *formant_names[] = { U"", U"oral ", U"nasal ", U"frication "
 	//	OPTION (U"Delta formant")
 
 #define KlattGrid_7formants_addCommonField(formantType) \
-	OPTIONMENUVAR (formantType, U"Formant type", 1) \
+	OPTIONMENU (formantType, U"Formant type", 1) \
 		OPTION (U"Normal formant") \
 		OPTION (U"Nasal formant") \
 		OPTION (U"Frication formant") \
@@ -62,18 +62,18 @@ static const char32 *formant_names[] = { U"", U"oral ", U"nasal ", U"frication "
 		OPTION (U"Delta formant")
 
 #define KlattGrid_PhonationGridPlayOptions_addCommonFields(useVoicing,useFlutter,useDoublePulsing,useCollisionPhase,useSpectralTilt,flowFunctionType,useFlowDerivative,useAspiration,useBreathiness) \
-	BOOLEANVAR (useVoicing, U"Voicing", true) \
-	BOOLEANVAR (useFlutter, U"Flutter", true) \
-	BOOLEANVAR (useDoublePulsing, U"Double pulsing", true) \
-	BOOLEANVAR (useCollisionPhase, U"Collision phase", true) \
-	BOOLEANVAR (useSpectralTilt, U"Spectral tilt", true) \
-	OPTIONMENUVAR (flowFunctionType, U"Flow function", 1) \
+	BOOLEAN (useVoicing, U"Voicing", true) \
+	BOOLEAN (useFlutter, U"Flutter", true) \
+	BOOLEAN (useDoublePulsing, U"Double pulsing", true) \
+	BOOLEAN (useCollisionPhase, U"Collision phase", true) \
+	BOOLEAN (useSpectralTilt, U"Spectral tilt", true) \
+	OPTIONMENU (flowFunctionType, U"Flow function", 1) \
 		OPTION (U"Powers in tiers") \
 		OPTION (U"t^2-t^3") \
 		OPTION (U"t^3-t^4") \
-	BOOLEANVAR (useFlowDerivative, U"Flow derivative", true) \
-	BOOLEANVAR (useAspiration, U"Aspiration", true) \
-	BOOLEANVAR (useBreathiness, U"Breathiness", true)
+	BOOLEAN (useFlowDerivative, U"Flow derivative", true) \
+	BOOLEAN (useAspiration, U"Aspiration", true) \
+	BOOLEAN (useBreathiness, U"Breathiness", true)
 
 static void KlattGrid_PhonationGridPlayOptions (KlattGrid me, int useVoicing, int useFlutter, int useDoublePulsing, int useCollisionPhase, int useSpectralTilt, int flowFunctionType, int useFlowDerivative, int useAspiration, int useBreathiness) {
 	PhonationGridPlayOptions pp = my phonation -> options.get();
@@ -89,15 +89,15 @@ static void KlattGrid_PhonationGridPlayOptions (KlattGrid me, int useVoicing, in
 }
 
 #define KlattGrid_formantSelection_vocalTract_commonFields(filtersStructure,fromOralFormant,toOralFormant,fromNasalFormant,toNasalFormant,fromNasalAntiFormant,toNasalAntiFormant) \
-	OPTIONMENUVAR (filtersStructure, U"Filter options", 1) \
+	OPTIONMENU (filtersStructure, U"Filter options", 1) \
 		OPTION (U"Cascade") \
 		OPTION (U"Parallel") \
-	INTEGERVAR (fromOralFormant, U"left Oral formant range", U"1") \
-	INTEGERVAR (toOralFormant, U"right Oral formant range", U"5") \
-	INTEGERVAR (fromNasalFormant, U"left Nasal formant range", U"1") \
-	INTEGERVAR (toNasalFormant, U"right Nasal formant range", U"1") \
-	INTEGERVAR (fromNasalAntiFormant, U"left Nasal antiformant range", U"1") \
-	INTEGERVAR (toNasalAntiFormant, U"right Nasal antiformant range", U"1")
+	INTEGER (fromOralFormant, U"left Oral formant range", U"1") \
+	INTEGER (toOralFormant, U"right Oral formant range", U"5") \
+	INTEGER (fromNasalFormant, U"left Nasal formant range", U"1") \
+	INTEGER (toNasalFormant, U"right Nasal formant range", U"1") \
+	INTEGER (fromNasalAntiFormant, U"left Nasal antiformant range", U"1") \
+	INTEGER (toNasalAntiFormant, U"right Nasal antiformant range", U"1")
 	
 static void KlattGrid_formantSelection_vocalTract (KlattGrid me, int filtersStructure, long fromOralFormant, long toOralFormant, long fromNasalFormant, long toNasalFormant, long fromNasalAntiFormant, long toNasalAntiFormant) {
 	VocalTractGridPlayOptions pv = my vocalTract -> options.get();
@@ -111,14 +111,14 @@ static void KlattGrid_formantSelection_vocalTract (KlattGrid me, int filtersStru
 }
 
 #define KlattGrid_formantSelection_coupling_commonFields(fromTrachealFormant,toTrachealFormant,fromTrachealAntiFormant,toTrachealAntiFormant,fromDeltaFormant,toDeltaFormant,fromDeltaBandwidth,toDeltaBandwidth) \
-	INTEGERVAR (fromTrachealFormant, U"left Tracheal formant range", U"1") \
-	INTEGERVAR (toTrachealFormant, U"right Tracheal formant range", U"1") \
-	INTEGERVAR (fromTrachealAntiFormant, U"left Tracheal antiformant range", U"1") \
-	INTEGERVAR (toTrachealAntiFormant, U"right Tracheal antiformant range", U"1") \
-	INTEGERVAR (fromDeltaFormant, U"left Delta formant range", U"1") \
-	INTEGERVAR (toDeltaFormant, U"right Delta formant range", U"1") \
-	INTEGERVAR (fromDeltaBandwidth, U"left Delta bandwidth range", U"1") \
-	INTEGERVAR (toDeltaBandwidth, U"right Delta bandwidth range", U"1")
+	INTEGER (fromTrachealFormant, U"left Tracheal formant range", U"1") \
+	INTEGER (toTrachealFormant, U"right Tracheal formant range", U"1") \
+	INTEGER (fromTrachealAntiFormant, U"left Tracheal antiformant range", U"1") \
+	INTEGER (toTrachealAntiFormant, U"right Tracheal antiformant range", U"1") \
+	INTEGER (fromDeltaFormant, U"left Delta formant range", U"1") \
+	INTEGER (toDeltaFormant, U"right Delta formant range", U"1") \
+	INTEGER (fromDeltaBandwidth, U"left Delta bandwidth range", U"1") \
+	INTEGER (toDeltaBandwidth, U"right Delta bandwidth range", U"1")
 
 static void KlattGrid_formantSelection_coupling (KlattGrid me, long fromTrachealFormant, long toTrachealFormant, long fromTrachealAntiFormant, long toTrachealAntiFormant, long fromDeltaFormant, long toDeltaFormant, long fromDeltaBandwidth, long toDeltaBandwidth) {
 	CouplingGridPlayOptions pc = my coupling -> options.get();
@@ -133,9 +133,9 @@ static void KlattGrid_formantSelection_coupling (KlattGrid me, long fromTracheal
 }
 
 #define KlattGrid_formantSelection_frication_commonFields(fromFricationFormant,toFricationFormant,useFricationBypass) \
-	INTEGERVAR (fromFricationFormant, U"left Frication formant range", U"1") \
-	INTEGERVAR (toFricationFormant, U"right Frication formant range", U"6") \
-	BOOLEANVAR (useFricationBypass, U"Frication bypass", true)
+	INTEGER (fromFricationFormant, U"left Frication formant range", U"1") \
+	INTEGER (toFricationFormant, U"right Frication formant range", U"6") \
+	BOOLEAN (useFricationBypass, U"Frication bypass", true)
 
 static void KlattGrid_formantSelection_frication (KlattGrid me, long fromFricationFormant, long toFricationFormant, int useFricationBypass) {
 	FricationGridPlayOptions pf = my frication -> options.get();
@@ -151,17 +151,17 @@ DIRECT (NEW1_KlattGrid_createExample) {
 }
 
 FORM (NEW1_KlattGrid_create, U"Create KlattGrid", U"Create KlattGrid...") {
-	WORDVAR (name, U"Name", U"kg")
-	REALVAR (fromTime, U"Start time (s)", U"0.0")
-	REALVAR (toTime, U"End time (s)", U"1.0")
-	INTEGERVAR (numberOfOralFormants, U"Number of oral formants", U"6")
-	INTEGERVAR (numberOfNasalFormants, U"Number of nasal formants", U"1")
-	INTEGERVAR (numberOfNasalAntiFormants, U"Number of nasal antiformants", U"1")
-	INTEGERVAR (numberOfFricationFormants, U"Number of frication formants", U"6")
+	WORD (name, U"Name", U"kg")
+	REAL (fromTime, U"Start time (s)", U"0.0")
+	REAL (toTime, U"End time (s)", U"1.0")
+	INTEGER (numberOfOralFormants, U"Number of oral formants", U"6")
+	INTEGER (numberOfNasalFormants, U"Number of nasal formants", U"1")
+	INTEGER (numberOfNasalAntiFormants, U"Number of nasal antiformants", U"1")
+	INTEGER (numberOfFricationFormants, U"Number of frication formants", U"6")
 	LABEL (U"", U"Coupling between source and filter")
-	INTEGERVAR (numberOfTrachealFormants, U"Number of tracheal formants", U"1")
-	INTEGERVAR (numberOfTrachealAntiFormants, U"Number of tracheal antiformants", U"1")
-	INTEGERVAR (numberOfDeltaFormants, U"Number of delta formants", U"1")
+	INTEGER (numberOfTrachealFormants, U"Number of tracheal formants", U"1")
+	INTEGER (numberOfTrachealAntiFormants, U"Number of tracheal antiformants", U"1")
+	INTEGER (numberOfDeltaFormants, U"Number of delta formants", U"1")
 	OK
 DO
 	REQUIRE (fromTime < toTime, U"The start time must lie before the end time.")
@@ -225,7 +225,7 @@ KlattGRID_EDIT_FORMANTGRID (Frication, KlattGrid_FRICATION_FORMANTS)
 
 #define KlattGrid_EDIT_FORMANT_AMPLITUDE_TIER(Name,name,formantType)  \
 FORM (WINDOW_KlattGrid_edit##Name##FormantAmplitudeTier, U"KlattGrid: View & Edit " #name " formant amplitude tier", nullptr) { \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
+	NATURAL (formantNumber, U"Formant number", U"1") \
 	OK \
 DO \
 	if (theCurrentPraatApplication -> batch) { Melder_throw (U"Cannot edit a KlattGrid from batch."); } \
@@ -250,7 +250,7 @@ KlattGrid_EDIT_FORMANT_AMPLITUDE_TIER (Frication, frication, KlattGrid_FRICATION
 
 #define KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE(Name,name,unit,default,require,requiremessage,newname,tiertype)  \
 FORM (REAL_KlattGrid_get##Name##AtTime, U"KlattGrid: Get " #name " at time", nullptr) { \
-	REALVAR (time, U"Time", U"0.5") \
+	REAL (time, U"Time", U"0.5") \
 	OK \
 DO \
 	NUMBER_ONE (KlattGrid) \
@@ -258,8 +258,8 @@ DO \
 	NUMBER_ONE_END (unit) \
 } \
 FORM (MODIFY_KlattGrid_add##Name##Point, U"KlattGrid: Add " #name " point", nullptr) { \
-	REALVAR (time, U"Time (s)", U"0.5") \
-	REALVAR (value, U"Value" unit, default) \
+	REAL (time, U"Time (s)", U"0.5") \
+	REAL (value, U"Value" unit, default) \
 	OK \
 DO \
 	REQUIRE (require, requiremessage) \
@@ -268,8 +268,8 @@ DO \
 	MODIFY_EACH_END \
 } \
 FORM (MODIFY_KlattGrid_remove##Name##Points, U"Remove " #name " points", nullptr) { \
-	REALVAR (fromTime, U"From time (s)", U"0.3") \
-	REALVAR (toTime, U"To time (s)", U"0.7") \
+	REAL (fromTime, U"From time (s)", U"0.3") \
+	REAL (toTime, U"To time (s)", U"0.7") \
 	OK \
 DO \
 	MODIFY_EACH (KlattGrid); \
@@ -322,7 +322,7 @@ KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (FricationBypass, frication b
 FORM (MODIFY_KlattGrid_formula##Name##Formant##ForBs, U"KlattGrid: Formula (" #namef "ormant " #forbs ")", U"Formant: Formula (" #forbs ")...") { \
 	LABEL (U"", U"row is formant number, col is point number:\nfor row from 1 to nrow do for col from 1 to ncol do " #ForBs " (row, col) :=") \
 	LABEL (U"", label) \
-	TEXTVAR (formula, U"formula", textfield) \
+	TEXTFIELD (formula, U"formula", textfield) \
 	OK \
 DO \
 	MODIFY_EACH (KlattGrid); \
@@ -332,9 +332,9 @@ DO \
 
 #define KlattGrid_ADD_FBA_VALUE(Name,namef,Form,FBA,fba,formantType,default,unit,require,requiremessage)  \
 FORM (MODIFY_KlattGrid_add##Name##Formant##FBA##Point, U"KlattGrid: Add " #namef "ormant " #fba " point", nullptr) { \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
-	REALVAR (time, U"Time (s)", U"0.5") \
-	REALVAR (value, U"Value " #unit, default) \
+	NATURAL (formantNumber, U"Formant number", U"1") \
+	REAL (time, U"Time (s)", U"0.5") \
+	REAL (value, U"Value " #unit, default) \
 	OK \
 DO \
 	REQUIRE (require, requiremessage) \
@@ -345,9 +345,9 @@ DO \
 
 #define KlattGrid_REMOVE_FBA_VALUE(Name,namef,Form,FBA,fba,formantType)  \
 FORM (MODIFY_KlattGrid_remove##Name##Formant##FBA##Points, U"KlattGrid: Remove " #namef "ormant " #fba " points", nullptr) { \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
-	REALVAR (fromTime, U"From time (s)", U"0.3")\
-	REALVAR (toTime, U"To time (s)", U"0.7") \
+	NATURAL (formantNumber, U"Formant number", U"1") \
+	REAL (fromTime, U"From time (s)", U"0.3")\
+	REAL (toTime, U"To time (s)", U"0.7") \
 	OK \
 DO \
 	MODIFY_EACH (KlattGrid); \
@@ -357,7 +357,7 @@ DO \
 
 #define KlattGrid_ADD_FORMANT(Name,namef,formantType)  \
 FORM (MODIFY_KlattGrid_add##Name##Formant, U"KlattGrid: Add " #namef "ormant", nullptr) { \
-	INTEGERVAR (position, U"Position", U"0 (= at end)") \
+	INTEGER (position, U"Position", U"0 (= at end)") \
 	OK \
 DO \
 	MODIFY_EACH (KlattGrid); \
@@ -367,7 +367,7 @@ DO \
 
 #define KlattGrid_REMOVE_FORMANT(Name,namef,formantType)  \
 FORM (MODIFY_KlattGrid_remove##Name##Formant, U"KlattGrid: Remove " #namef "ormant", nullptr) { \
-	INTEGERVAR (position, U"Position", U"0 (= do nothing)") \
+	INTEGER (position, U"Position", U"0 (= do nothing)") \
 	OK \
 DO \
 	MODIFY_EACH (KlattGrid); \
@@ -377,7 +377,7 @@ DO \
 
 #define KlattGrid_ADD_FORMANT_FREQUENCYANDBANDWIDTHTIERS(Name,namef,formantType)  \
 FORM (MODIFY_KlattGrid_add##Name##FormantFrequencyAndBandwidthTiers, U"KlattGrid: Add " #namef "ormant", nullptr) { \
-	INTEGERVAR (position, U"Position", U"0 (= at end)") \
+	INTEGER (position, U"Position", U"0 (= at end)") \
 	OK \
 DO \
 	MODIFY_EACH (KlattGrid); \
@@ -387,7 +387,7 @@ DO \
 
 #define KlattGrid_REMOVE_FORMANT_FREQUENCYANDBANDWIDTHTIERS(Name,namef,formantType)  \
 FORM (MODIFY_KlattGrid_remove##Name##FormantFrequencyAndBandwidthTiers, U"KlattGrid: Remove " #namef "ormant", nullptr) { \
-	INTEGERVAR (position, U"Position", U"0 (= at end)") \
+	INTEGER (position, U"Position", U"0 (= at end)") \
 	OK \
 DO \
 	MODIFY_EACH (KlattGrid); \
@@ -397,7 +397,7 @@ DO \
 
 #define KlattGrid_ADD_FORMANT_AMPLITUDETIER(Name,namef,formantType)  \
 FORM (MODIFY_KlattGrid_add##Name##FormantAmplitudeTier, U"KlattGrid: Add " #namef "ormant amplitude tier", nullptr) { \
-	INTEGERVAR (position, U"Position", U"0 (= at end)") \
+	INTEGER (position, U"Position", U"0 (= at end)") \
 	OK \
 DO \
 	MODIFY_EACH (KlattGrid); \
@@ -407,7 +407,7 @@ DO \
 
 #define KlattGrid_REMOVE_FORMANT_AMPLITUDETIER(Name,namef,formantType)  \
 FORM (MODIFY_KlattGrid_remove##Name##FormantAmplitudeTier, U"KlattGrid: Remove " #namef "ormant amplitude tier", nullptr) { \
-	INTEGERVAR (position, U"Position", U"0 (= at end)") \
+	INTEGER (position, U"Position", U"0 (= at end)") \
 	OK \
 DO \
 	MODIFY_EACH (KlattGrid); \
@@ -481,7 +481,7 @@ DIRECT (NEW_KlattGrid_extractPointProcess_glottalClosures) {
 FORM (MODIFY_KlattGrid_formula_frequencies, U"KlattGrid: Formula (frequencies)", U"Formant: Formula (frequencies)...") {
 	KlattGrid_6formants_addCommonField (formantType)
 	LABEL (U"", U"row is formant number, col is point number: for row from 1 to nrow do for col from 1 to ncol do F (row, col) :=")
-	TEXTVAR (formula, U"formula", U"if row = 2 then self + 200 else self fi")
+	TEXTFIELD (formula, U"formula", U"if row = 2 then self + 200 else self fi")
 	OK
 DO
 	MODIFY_EACH (KlattGrid)
@@ -492,7 +492,7 @@ DO
 FORM (MODIFY_KlattGrid_formula_bandwidths, U"KlattGrid: Formula (bandwidths)", U"Formant: Formula (bandwidths)...") {
 	KlattGrid_6formants_addCommonField (formantType)
 	LABEL (U"", U"row is formant number, col is point number: for row from 1 to nrow do for col from 1 to ncol do F (row, col) :=")
-	TEXTVAR (formula, U"formula", U"if row = 2 then self + 200 else self fi")
+	TEXTFIELD (formula, U"formula", U"if row = 2 then self + 200 else self fi")
 	OK
 DO
 	MODIFY_EACH (KlattGrid)
@@ -502,8 +502,8 @@ DO
 
 #define KlattGrid_FORMANT_GET_FB_VALUE(Name,name,ForB,forb,FormB,formantType)  \
 FORM (REAL_KlattGrid_get##Name##Formant##ForB##AtTime, U"KlattGrid: Get " #name " " #forb " at time", nullptr) { \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
-	REALVAR (time, U"Time (s)", U"0.5") \
+	NATURAL (formantNumber, U"Formant number", U"1") \
+	REAL (time, U"Time (s)", U"0.5") \
 	OK \
 DO \
 	LOOP { iam (KlattGrid); \
@@ -513,8 +513,8 @@ END }
 
 #define KlattGrid_FORMANT_GET_A_VALUE(Name,name,formantType)  \
 FORM (REAL_KlattGrid_get##Name##FormantAmplitudeAtTime, U"KlattGrid: Get " #name " formant amplitude at time", nullptr) { \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
-	REALVAR (time, U"Time (s)", U"0.5") \
+	NATURAL (formantNumber, U"Formant number", U"1") \
+	REAL (time, U"Time (s)", U"0.5") \
 	OK \
 DO \
 	LOOP { iam (KlattGrid); \
@@ -550,7 +550,7 @@ END }
 
 #define KlattGrid_EXTRACT_FORMANT_AMPLITUDE(Name,name,formantType)  \
 FORM (NEW_KlattGrid_extract##Name##FormantAmplitudeTier, U"KlattGrid: Extract " #name " formant amplitude tier", nullptr) { \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
+	NATURAL (formantNumber, U"Formant number", U"1") \
 	OK \
 DO \
 	LOOP { iam (KlattGrid); \
@@ -581,7 +581,7 @@ DIRECT (MODIFY_KlattGrid_replace##Name##FormantGrid) { \
 
 #define KlattGrid_REPLACE_FORMANT_AMPLITUDE(Name,name,formantType)  \
 FORM (MODIFY_KlattGrid_replace##Name##FormantAmplitudeTier, U"KlattGrid: Replace " #name " formant amplitude tier", nullptr) { \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
+	NATURAL (formantNumber, U"Formant number", U"1") \
 	OK \
 DO \
 	MODIFY_FIRST_OF_TWO (KlattGrid, IntensityTier); \
@@ -607,8 +607,8 @@ KlattGrid_REPLACE_FORMANT_AMPLITUDE (Frication, frication, KlattGrid_FRICATION_F
 #define KlattGrid_FORMANT_GET_ADD_REMOVE(Name,name,unit,default,require,requiremessage)  \
 FORM (REAL_KlattGrid_get##Name##AtTime, U"KlattGrid: Get " #name " at time", nullptr) { \
 	KlattGrid_6formants_addCommonField (formantType) \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
-	REALVAR (time, U"Time (s)", U"0.5") \
+	NATURAL (formantNumber, U"Formant number", U"1") \
+	REAL (time, U"Time (s)", U"0.5") \
 	OK \
 DO \
 	LOOP { iam (KlattGrid); \
@@ -616,8 +616,8 @@ DO \
 	} \
 END } \
 FORM (REAL_KlattGrid_getDelta##Name##AtTime, U"KlattGrid: Get delta " #name " at time", nullptr) { \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
-	REALVAR (time, U"Time (s)", U"0.5") \
+	NATURAL (formantNumber, U"Formant number", U"1") \
+	REAL (time, U"Time (s)", U"0.5") \
 	OK \
 DO \
 	LOOP { iam (KlattGrid); \
@@ -626,9 +626,9 @@ DO \
 END } \
 FORM (MODIFY_KlattGrid_add##Name##Point, U"KlattGrid: Add " #name " point", nullptr) { \
 	KlattGrid_6formants_addCommonField (formantType) \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
-	REALVAR (time, U"Time (s)", U"0.5") \
-	REALVAR (value, U"Value" unit, default) \
+	NATURAL (formantNumber, U"Formant number", U"1") \
+	REAL (time, U"Time (s)", U"0.5") \
+	REAL (value, U"Value" unit, default) \
 	OK \
 DO \
 	REQUIRE (require, requiremessage) \
@@ -638,9 +638,9 @@ DO \
 	} \
 END } \
 FORM (MODIFY_KlattGrid_addDelta##Name##Point, U"KlattGrid: Add delta " #name " point", nullptr) { \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
-	REALVAR (time, U"Time (s)", U"0.5") \
-	REALVAR (value, U"Value" unit, default) \
+	NATURAL (formantNumber, U"Formant number", U"1") \
+	REAL (time, U"Time (s)", U"0.5") \
+	REAL (value, U"Value" unit, default) \
 	OK \
 DO \
 	REQUIRE (require, requiremessage) \
@@ -651,9 +651,9 @@ DO \
 END } \
 FORM (MODIFY_KlattGrid_remove##Name##Points, U"Remove " #name " points", nullptr) { \
 	KlattGrid_6formants_addCommonField (formantType) \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
-	REALVAR (fromTime, U"From time (s)", U"0.3")\
-	REALVAR (toTime, U"To time (s)", U"0.7") \
+	NATURAL (formantNumber, U"Formant number", U"1") \
+	REAL (fromTime, U"From time (s)", U"0.3")\
+	REAL (toTime, U"To time (s)", U"0.7") \
 	OK \
 DO \
 	LOOP { iam (KlattGrid); \
@@ -662,9 +662,9 @@ DO \
 	} \
 END } \
 FORM (MODIFY_KlattGrid_removeDelta##Name##Points, U"Remove delta " #name " points", nullptr) { \
-	NATURALVAR (formantNumber, U"Formant number", U"1") \
-	REALVAR (fromTime, U"From time (s)", U"0.3")\
-	REALVAR (toTime, U"To time (s)", U"0.7") \
+	NATURAL (formantNumber, U"Formant number", U"1") \
+	REAL (fromTime, U"From time (s)", U"0.3")\
+	REAL (toTime, U"To time (s)", U"0.7") \
 	OK \
 DO \
 	LOOP { iam (KlattGrid); \
@@ -680,11 +680,11 @@ KlattGrid_FORMANT_GET_ADD_REMOVE (Bandwidth, bandwidth, U" (Hz)", U"50.0", (valu
 
 FORM (MODIFY_KlattGrid_addFormantAndBandwidthTier, U"", nullptr) {
 	KlattGrid_7formants_addCommonField (formantType)
-	INTEGER (U"Position", U"0 (= at end)")
+	INTEGER (position, U"Position", U"0 (= at end)")
 	OK
 DO
 	MODIFY_EACH (KlattGrid)
-		KlattGrid_addFormantFrequencyAndBandwidthTiers (me, formantType, GET_INTEGER (U"Position"));
+		KlattGrid_addFormantFrequencyAndBandwidthTiers (me, formantType, position);
 	MODIFY_EACH_END
 }
 
@@ -708,8 +708,8 @@ DO
 
 FORM (REAL_KlattGrid_getAmplitudeAtTime, U"KlattGrid: Get amplitude at time", nullptr) {
 	KlattGrid_4formants_addCommonField (formantType)
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	REALVAR (time, U"Time (s)", U"0.5")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (KlattGrid)
@@ -719,9 +719,9 @@ DO
 
 FORM (MODIFY_KlattGrid_addAmplitudePoint, U"KlattGrid: Add amplitude point", nullptr) {
 	KlattGrid_4formants_addCommonField (formantType)
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	REALVAR (time, U"Time (s)", U"0.5")
-	REALVAR (value_hz, U"Value (Hz)", U"80.0")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (time, U"Time (s)", U"0.5")
+	REAL (value_hz, U"Value (Hz)", U"80.0")
 	OK
 DO
 	MODIFY_EACH (KlattGrid)
@@ -731,9 +731,9 @@ DO
 
 FORM (MODIFY_KlattGrid_removeAmplitudePoints, U"Remove amplitude points", nullptr) {
 	KlattGrid_4formants_addCommonField (formantType)
-	NATURALVAR (formantNumber, U"Formant number", U"1")
-	REALVAR (fromTime, U"From time (s)", U"0.3")
-	REALVAR (toTime, U"To time (s)", U"0.7")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (fromTime, U"From time (s)", U"0.3")
+	REAL (toTime, U"To time (s)", U"0.7")
 	OK
 DO
 	MODIFY_EACH (KlattGrid);
@@ -743,7 +743,7 @@ DO
 
 FORM (NEW_KlattGrid_extractAmplitudeTier, U"", nullptr) {
 	KlattGrid_4formants_addCommonField (formantType)
-	NATURALVAR (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	CONVERT_EACH (KlattGrid)
@@ -753,7 +753,7 @@ DO
 
 FORM (MODIFY_KlattGrid_replaceAmplitudeTier, U"KlattGrid: Replace amplitude tier", nullptr) {
 	KlattGrid_4formants_addCommonField (formantType)
-	NATURALVAR (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	MODIFY_FIRST_OF_TWO (KlattGrid, IntensityTier)
@@ -762,10 +762,10 @@ DO
 }
 
 FORM (NEW_KlattGrid_to_Sound_special, U"KlattGrid: To Sound (special)", U"KlattGrid: To Sound (special)...") {
-	REALVAR (fromTime, U"left Time range (s)", U"0")
-	REALVAR (toTime, U"right Time range (s)", U"0")
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
-	BOOLEANVAR (scalePeak, U"Scale peak", true)
+	REAL (fromTime, U"left Time range (s)", U"0")
+	REAL (toTime, U"right Time range (s)", U"0")
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	BOOLEAN (scalePeak, U"Scale peak", true)
 	KlattGrid_PhonationGridPlayOptions_addCommonFields (useVoicing, useFlutter, useDoublePulsing, useCollisionPhase, useSpectralTilt, flowFunctionType, useFlowDerivative, useAspiration, useBreathiness)
 	KlattGrid_formantSelection_vocalTract_commonFields (filtersStructure, fromOralFormant, toOralFormant, fromNasalFormant, toNasalFormant, fromNasalAntiFormant, toNasalAntiFormant)
 	KlattGrid_formantSelection_coupling_commonFields (fromTrachealFormant, toTrachealFormant, fromTrachealAntiFormant, toTrachealAntiFormant, fromDeltaFormant, toDeltaFormant, fromDeltaBandwidth, toDeltaBandwidth)
@@ -796,9 +796,9 @@ DIRECT (NEW_KlattGrid_to_Sound) {
 }
 
 FORM (PLAY_KlattGrid_playSpecial, U"KlattGrid: Play special", U"KlattGrid: Play special...") {
-	REALVAR (fromTime, U"left Time range (s)", U"0")
-	REALVAR (toTime, U"right Time range (s)", U"0")
-	BOOLEANVAR (scalePeak, U"Scale peak", true)
+	REAL (fromTime, U"left Time range (s)", U"0")
+	REAL (toTime, U"right Time range (s)", U"0")
+	BOOLEAN (scalePeak, U"Scale peak", true)
 	KlattGrid_PhonationGridPlayOptions_addCommonFields (useVoicing, useFlutter, useDoublePulsing, useCollisionPhase, useSpectralTilt, flowFunctionType, useFlowDerivative, useAspiration, useBreathiness)
 	KlattGrid_formantSelection_vocalTract_commonFields (filtersStructure, fromOralFormant, toOralFormant, fromNasalFormant, toNasalFormant, fromNasalAntiFormant, toNasalAntiFormant);
 	KlattGrid_formantSelection_coupling_commonFields (fromTrachealFormant, toTrachealFormant, fromTrachealAntiFormant, toTrachealAntiFormant, fromDeltaFormant, toDeltaFormant, fromDeltaBandwidth, toDeltaBandwidth)
@@ -821,7 +821,7 @@ DO
 }
 
 FORM (NEW_KlattGrid_to_Sound_phonation, U"KlattGrid: To Sound (phonation)", U"KlattGrid: To Sound (phonation)...") {
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
 	KlattGrid_PhonationGridPlayOptions_addCommonFields (useVoicing, useFlutter, useDoublePulsing, useCollisionPhase, useSpectralTilt, flowFunctionType, useFlowDerivative, useAspiration, useBreathiness)
 	OK
 DO
@@ -843,7 +843,7 @@ DIRECT (PLAY_KlattGrid_play) {
 }
 
 FORM (GRAPHICS_KlattGrid_draw, U"KlattGrid: Draw", nullptr) {
-	RADIOVAR (filtersStructure, U"Synthesis filters structure", 1)
+	RADIO (filtersStructure, U"Synthesis filters structure", 1)
 		RADIOBUTTON (U"Cascade")
 		RADIOBUTTON (U"Parallel")
 	OK
@@ -854,10 +854,10 @@ DO
 }
 
 FORM (GRAPHICS_KlattGrid_drawVocalTract, U"KlattGrid: Draw vocal tract", nullptr) {
-	RADIOVAR (filtersStructure, U"Synthesis filters structure", 1)
+	RADIO (filtersStructure, U"Synthesis filters structure", 1)
 		RADIOBUTTON (U"Cascade")
 		RADIOBUTTON (U"Parallel")
-	BOOLEANVAR (includeTrachealFormants, U"Include tracheal formants", true);
+	BOOLEAN (includeTrachealFormants, U"Include tracheal formants", true);
 	OK
 DO
 	GRAPHICS_EACH (KlattGrid)
@@ -878,7 +878,7 @@ DIRECT (GRAPHICS_KlattGrid_drawFrication) {
 }
 
 FORM (NEW_KlattGrid_to_oralFormantGrid_openPhases, U"KlattGrid: Extract oral formant grid (open phases)", U"KlattGrid: Extract oral formant grid (open phases)...") {
-	REALVAR (fadeFraction, U"Fade fraction (0..0.5)", U"0.1")
+	REAL (fadeFraction, U"Fade fraction (0..0.5)", U"0.1")
 	OK
 DO
 	REQUIRE (fadeFraction < 0.5, U"Fade fraction has to be smaller than 0.5.")
@@ -888,7 +888,7 @@ DO
 }
 
 FORM (NEW_Sound_KlattGrid_filterByVocalTract, U"Sound & KlattGrid: Filter by vocal tract", U"Sound & KlattGrid: Filter by vocal tract...") {
-	RADIOVAR (filtersStructure, U"Vocal tract filter model", 1)
+	RADIO (filtersStructure, U"Vocal tract filter model", 1)
 		RADIOBUTTON (U"Cascade")
 		RADIOBUTTON (U"Parallel")
 	OK
diff --git a/dwtools/praat_MDS_init.cpp b/dwtools/praat_MDS_init.cpp
index fec200c..ac8093c 100644
--- a/dwtools/praat_MDS_init.cpp
+++ b/dwtools/praat_MDS_init.cpp
@@ -91,7 +91,7 @@ static void TabelOfReal_testSorting (TableOfReal me, long rowtoindex) {
 #define iam iam_LOOP
 
 FORM (MODIFY_TabelOfReal_testSorting, U"TabelOfReal: Sort and index", U"") {
-	NATURALVAR (rowIndex, U"Row to index", U"1")
+	NATURAL (rowIndex, U"Row to index", U"1")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -103,7 +103,7 @@ DO
 
 FORM (NEW1_Dissimilarity_createLetterRExample, U"Create letter R example", U"Create letter R example...") {
 	LABEL (U"", U"For the monotone transformation on the distances")
-	REALVAR (noiseRange, U"Noise range", U"32.5")
+	REAL (noiseRange, U"Noise range", U"32.5")
 	OK
 DO
 	CREATE_ONE
@@ -112,18 +112,18 @@ DO
 }
 
 FORM (NEWMANY_INDSCAL_createCarrollWishExample, U"Create INDSCAL Carroll & Wish example...", U"Create INDSCAL Carroll & Wish example...") {
-	REALVAR (noiseStandardDeviation, U"Noise standard deviation", U"0.0")
+	REAL (noiseStandardDeviation, U"Noise standard deviation", U"0.0")
 	OK
 DO
 	praat_new (INDSCAL_createCarrollWishExample (noiseStandardDeviation), U""); 
 END }
 
 FORM (NEW1_Configuration_create, U"Create Configuration", U"Create Configuration...") {
-	WORDVAR (name, U"Name", U"uniform")
-	NATURALVAR (numberOfPoints, U"Number of points", U"10")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
+	WORD (name, U"Name", U"uniform")
+	NATURAL (numberOfPoints, U"Number of points", U"10")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	LABEL (U"", U"Formula:")
-	TEXTVAR (formula, U"formula", U"randomUniform(-1.5, 1.5)")
+	TEXTFIELD (formula, U"formula", U"randomUniform(-1.5, 1.5)")
 	OK
 DO
 	CREATE_ONE
@@ -133,16 +133,16 @@ DO
 }
 
 FORM (GRAPHICS_drawSplines, U"Draw splines", U"spline") {
-	REALVAR (xmin, U"left Horizontal range", U"0.0")
-	REALVAR (xmax, U"right Horizontal range", U"1.0")
-	REALVAR (ymin, U"left Vertical range", U"0.0")
-	REALVAR (ymax, U"right Vertical range", U"20.0")
-	RADIOVAR (splineType, U"Spline type", 1)
+	REAL (xmin, U"left Horizontal range", U"0.0")
+	REAL (xmax, U"right Horizontal range", U"1.0")
+	REAL (ymin, U"left Vertical range", U"0.0")
+	REAL (ymax, U"right Vertical range", U"20.0")
+	RADIO (splineType, U"Spline type", 1)
 		RADIOBUTTON (U"M-spline")
 		RADIOBUTTON (U"I-spline")
-	INTEGERVAR (order, U"Order", U"3")
-	SENTENCEVAR (interiorKnots_string, U"Interior knots", U"0.3 0.5 0.6")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (order, U"Order", U"3")
+	SENTENCE (interiorKnots_string, U"Interior knots", U"0.3 0.5 0.6")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	if (xmax <= xmin or ymax <= ymin) {
@@ -174,8 +174,8 @@ DIRECT (NEW_AffineTransform_invert) {
 }
 
 FORM (REAL_AffineTransform_getTransformationElement, U"AffineTransform: Get transformation element", U"Procrustes") {
-	NATURALVAR (row, U"Row number", U"1")
-	NATURALVAR (column, U"Column number", U"1")
+	NATURAL (row, U"Row number", U"1")
+	NATURAL (column, U"Column number", U"1")
 	OK
 DO
 	NUMBER_ONE (AffineTransform)
@@ -190,7 +190,7 @@ DO
 }
 
 FORM (REAL_AffineTransform_getTranslationElement, U"AffineTransform: Get translation element", U"Procrustes") {
-	NATURALVAR (index, U"Index", U"1")
+	NATURAL (index, U"Index", U"1")
 	OK
 DO
 	NUMBER_ONE (AffineTransform)
@@ -220,19 +220,19 @@ DIRECT (HELP_Configuration_help) {
 }
 
 #define praat_Configuration_draw_commonFields(horizontalDimension,verticalDimension,xmin,xmax,ymin,ymax) \
-	NATURALVAR (horizontalDimension, U"Horizontal dimension", U"1") \
-	NATURALVAR (verticalDimension, U"Vertical dimension", U"2") \
-	REALVAR (xmin, U"left Horizontal range", U"0.0") \
-	REALVAR (xmax, U"right Horizontal range", U"0.0") \
-	REALVAR (ymin, U"left Vertical range", U"0.0") \
-	REALVAR (ymax, U"right Vertical range", U"0.0")
+	NATURAL (horizontalDimension, U"Horizontal dimension", U"1") \
+	NATURAL (verticalDimension, U"Vertical dimension", U"2") \
+	REAL (xmin, U"left Horizontal range", U"0.0") \
+	REAL (xmax, U"right Horizontal range", U"0.0") \
+	REAL (ymin, U"left Vertical range", U"0.0") \
+	REAL (ymax, U"right Vertical range", U"0.0")
 
 FORM (GRAPHICS_Configuration_draw, U"Configuration: Draw", U"Configuration: Draw...") {
 	praat_Configuration_draw_commonFields(horizontalDimension,verticalDimension,xmin,xmax,ymin,ymax)
-	NATURALVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (useRowLables, U"Use row labels", false)
-	WORDVAR (label, U"Label", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (labelSize, U"Label size", U"12")
+	BOOLEAN (useRowLables, U"Use row labels", false)
+	WORD (label, U"Label", U"+")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Configuration)
@@ -241,10 +241,10 @@ DO
 }
 
 FORM (GRAPHICS_Configuration_drawSigmaEllipses, U"Configuration: Draw sigma ellipses", U"Configuration: Draw sigma ellipses...") {
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"1.0")
 	praat_Configuration_draw_commonFields(horizontalDimension,verticalDimension,xmin,xmax,ymin,ymax)
-	INTEGERVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (labelSize, U"Label size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Configuration)
@@ -253,11 +253,11 @@ DO
 }
 
 FORM (GRAPHICS_Configuration_drawOneSigmaEllipse, U"Configuration: Draw one sigma ellipse", U"Configuration: Draw sigma ellipses...") {
-	SENTENCEVAR (label, U"Label", U"")
-	POSITIVEVAR (numberOfSigmas, U"Number of sigmas", U"1.0")
+	SENTENCE (label, U"Label", U"")
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"1.0")
 	praat_Configuration_draw_commonFields(horizontalDimension,verticalDimension,xmin,xmax,ymin,ymax)
-	INTEGERVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (labelSize, U"Label size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Configuration)
@@ -267,10 +267,10 @@ DO
 
 
 FORM (GRAPHICS_Configuration_drawConfidenceEllipses, U"Configuration: Draw confidence ellipses", nullptr) {
-	POSITIVEVAR (confidenceLevel, U"Confidence level (0-1)", U"0.95")
+	POSITIVE (confidenceLevel, U"Confidence level (0-1)", U"0.95")
 	praat_Configuration_draw_commonFields(horizontalDimension,verticalDimension,xmin,xmax,ymin,ymax)
-	INTEGERVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (labelSize, U"Label size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Configuration)
@@ -279,11 +279,11 @@ DO
 }
 
 FORM (GRAPHICS_Configuration_drawOneConfidenceEllipse, U"Configuration: Draw one confidence ellipse", nullptr) {
-	SENTENCEVAR (label, U"Label", U"")
-	POSITIVEVAR (confidenceLevel, U"Confidence level (0-1)", U"0.95")
+	SENTENCE (label, U"Label", U"")
+	POSITIVE (confidenceLevel, U"Confidence level (0-1)", U"0.95")
 	praat_Configuration_draw_commonFields(horizontalDimension,verticalDimension,xmin,xmax,ymin,ymax)
-	INTEGERVAR (labelSize, U"Label size", U"12")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	INTEGER (labelSize, U"Label size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Configuration)
@@ -298,9 +298,9 @@ DIRECT (MODIFY_Configuration_randomize) {
 }
 
 FORM (MODIFY_Configuration_normalize, U"Configuration: Normalize", U"Configuration: Normalize...") {
-	REALVAR (sumOfSquares, U"Sum of squares", U"0.0")
+	REAL (sumOfSquares, U"Sum of squares", U"0.0")
 	LABEL (U"", U"On (INDSCAL), Off (Kruskal)")
-	BOOLEANVAR (separateDimensions, U"Each dimension separately", true)
+	BOOLEAN (separateDimensions, U"Each dimension separately", true)
 	OK
 DO
 	MODIFY_EACH (Configuration)
@@ -315,9 +315,9 @@ DIRECT (MODIFY_Configuration_centralize) {
 }
 
 FORM (MODIFY_Configuration_rotate, U"Configuration: Rotate", U"Configuration: Rotate...") {
-	NATURALVAR (dimension1, U"Dimension 1", U"1")
-	NATURALVAR (dimension2, U"Dimension 2", U"2")
-	REALVAR (angle_degrees, U"Angle (degrees)", U"60.0")
+	NATURAL (dimension1, U"Dimension 1", U"1")
+	NATURAL (dimension2, U"Dimension 2", U"2")
+	REAL (angle_degrees, U"Angle (degrees)", U"60.0")
 	OK
 DO
 	MODIFY_EACH (Configuration)
@@ -332,7 +332,7 @@ DIRECT (MODIFY_Configuration_rotateToPrincipalDirections) {
 }
 
 FORM (MODIFY_Configuration_invertDimension, U"Configuration: Invert dimension", U"Configuration: Invert dimension...") {
-	NATURALVAR (dimension, U"Dimension", U"1")
+	NATURAL (dimension, U"Dimension", U"1")
 	OK
 DO
 	MODIFY_EACH (Configuration)
@@ -347,10 +347,10 @@ DIRECT (NEW_Configuration_to_Distance) {
 }
 
 FORM (NEW_Configuration_varimax, U"Configuration: To Configuration (varimax)", U"Configuration: To Configuration (varimax)...") {
-	BOOLEANVAR (normalizeRows, U"Normalize rows", true)
-	BOOLEANVAR (useQuartimax, U"Quartimax", false)
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"50")
-	POSITIVEVAR (tolerance, U"Tolerance", U"1e-6")
+	BOOLEAN (normalizeRows, U"Normalize rows", true)
+	BOOLEAN (useQuartimax, U"Quartimax", false)
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"50")
+	POSITIVE (tolerance, U"Tolerance", U"1e-6")
 	OK
 DO
 	CONVERT_EACH (Configuration)
@@ -365,7 +365,7 @@ DIRECT (NEW1_Configurations_to_Similarity_cc) {
 }
 
 FORM (NEW1_Configurations_to_Procrustes, U"Configuration & Configuration: To Procrustes", U"Configuration & Configuration: To Procrustes...") {
-	BOOLEANVAR (useOrthogonalTransform, U"Use orthogonal transform", false)
+	BOOLEAN (useOrthogonalTransform, U"Use orthogonal transform", false)
 	OK
 DO
 	CONVERT_COUPLE (Configuration)
@@ -374,8 +374,8 @@ DO
 }
 
 FORM (NEW1_Configurations_to_AffineTransform_congruence, U"Configurations: To AffineTransform (congruence)", U"Configurations: To AffineTransform (congruence)...") {
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"50")
-	POSITIVEVAR (tolerance, U"Tolerance", U"1e-6")
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"50")
+	POSITIVE (tolerance, U"Tolerance", U"1e-6")
 	OK
 DO
 	CONVERT_COUPLE (Configuration)
@@ -404,7 +404,7 @@ DIRECT (NEW1_Configuration_and_Procrustes_to_Configuration) {
 /*************** Confusion *********************************/
 
 FORM (NEW_Confusion_to_Dissimilarity_pdf, U"Confusion: To Dissimilarity (pdf)", U"Confusion: To Dissimilarity (pdf)...") {
-	POSITIVEVAR (minimumConfusionLevel, U"Minimum confusion level", U"0.5")
+	POSITIVE (minimumConfusionLevel, U"Minimum confusion level", U"0.5")
 	OK
 DO
 	CONVERT_EACH (Confusion)
@@ -413,8 +413,8 @@ DO
 }
 
 FORM (NEW_Confusion_to_Similarity, U"Confusion: To Similarity", U"Confusion: To Similarity...") {
-	BOOLEANVAR (normalize, U"Normalize", true)
-	RADIOVAR (symmetrizeMethod, U"Symmetrization", 1)
+	BOOLEAN (normalize, U"Normalize", true)
+	RADIO (symmetrizeMethod, U"Symmetrization", 1)
 		RADIOBUTTON (U"No symmetrization")
 		RADIOBUTTON (U"Average (s[i][j] = (c[i][j]+c[j][i])/2)")
 		RADIOBUTTON (U"Houtgast (s[i][j]= sum (min(c[i][k],c[j][k])))")
@@ -441,8 +441,8 @@ DIRECT (NEW_Confusion_to_ContingencyTable) {
 
 
 FORM (NEW_ContingencyTable_to_Configuration_ca, U"ContingencyTable: To Configuration (ca)", U"ContingencyTable: To Configuration (ca)...") {
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
-	RADIOVAR (scalingType, U"Scaling of final configuration", 3)
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
+	RADIO (scalingType, U"Scaling of final configuration", 3)
 		RADIOBUTTON (U"Row points in centre of gravity of column points")
 		RADIOBUTTON (U"Column points in centre of gravity of row points")
 		RADIOBUTTON (U"Row points and column points symmetric")
@@ -474,7 +474,7 @@ DIRECT (REAL_ContingencyTable_contingencyCoefficient) {
 /************************* Correlation ***********************************/
 
 FORM (NEW_Correlation_to_Configuration, U"Correlation: To Configuration", nullptr) {
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	OK
 DO
 	CONVERT_EACH (Correlation)
@@ -490,7 +490,7 @@ DIRECT (HELP_Similarity_help) {
 }
 
 FORM (NEW_Similarity_to_Dissimilarity, U"Similarity: To Dissimilarity", U"Similarity: To Dissimilarity...") {
-	REALVAR (maximumDissimilarity, U"Maximum dissimilarity", U"0.0 (= from data)")
+	REAL (maximumDissimilarity, U"Maximum dissimilarity", U"0.0 (= from data)")
 	OK
 DO
 	CONVERT_EACH (Similarity)
@@ -502,26 +502,26 @@ DO
 
 #define praat_Dissimilarity_to_Configuration_commonFields(tolerance,maximumNumberOfIterations,numberOfRepetitions) \
 	LABEL (U"", U"Minimization parameters") \
-	REALVAR (tolerance, U"Tolerance", U"1e-5") \
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"50 (= each repetition)") \
-	NATURALVAR (numberOfRepetitions, U"Number of repetitions", U"1")
+	REAL (tolerance, U"Tolerance", U"1e-5") \
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"50 (= each repetition)") \
+	NATURAL (numberOfRepetitions, U"Number of repetitions", U"1")
 
 
 #define Dissimilarity_and_Configuration_getStress_addCommonFields(stressMeasure) \
-	RADIOVAR (stressMeasure, U"Stress measure", 1) \
+	RADIO (stressMeasure, U"Stress measure", 1) \
 		RADIOBUTTON (U"Normalized") \
 		RADIOBUTTON (U"Kruskal's stress-1") \
 		RADIOBUTTON (U"Kruskal's stress-2") \
 		RADIOBUTTON (U"Raw")
 
 #define praat_Dissimilarity_Configuration_drawing_commonFields(fromProximity,toProximity,fromDistance,toDistance,markSize,markString,garnish) \
-	REALVAR (fromProximity, U"left Proximity range", U"0.0") \
-	REALVAR (toProximity, U"right Proximity range", U"0.0") \
-	REALVAR (fromDistance, U"left Distance range", U"0.0") \
-	REALVAR (toDistance, U"right Distance range", U"0.0") \
-	POSITIVEVAR (markSize, U"Mark size (mm)", U"1.0") \
-	SENTENCEVAR (markString, U"Mark string (+xo.)", U"+") \
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromProximity, U"left Proximity range", U"0.0") \
+	REAL (toProximity, U"right Proximity range", U"0.0") \
+	REAL (fromDistance, U"left Distance range", U"0.0") \
+	REAL (toDistance, U"right Distance range", U"0.0") \
+	POSITIVE (markSize, U"Mark size (mm)", U"1.0") \
+	SENTENCE (markString, U"Mark string (+xo.)", U"+") \
+	BOOLEAN (garnish, U"Garnish", true)
 
 DIRECT (HELP_Dissimilarity_help) {
 	HELP (U"Dissimilarity")
@@ -536,10 +536,10 @@ DIRECT (REAL_Dissimilarity_getAdditiveConstant) {
 END }
 
 FORM (NEW1_Dissimilarity_Configuration_kruskal, U"Dissimilarity & Configuration: To Configuration (kruskal)", U"Dissimilarity & Configuration: To Configuration (kruskal)...") {
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach")
 		RADIOBUTTON (U"Secondary approach")
-	RADIOVAR (stressFormula, U"Stress calculation", 1)
+	RADIO (stressFormula, U"Stress calculation", 1)
 		RADIOBUTTON (U"Formula1")
 		RADIOBUTTON (U"Formula2")
 	praat_Dissimilarity_to_Configuration_commonFields (tolerance,maximumNumberOfIterations,numberOfRepetitions)
@@ -581,7 +581,7 @@ DO
 }
 
 FORM (NEW1_Dissimilarity_Configuration_monotone_mds, U"Dissimilarity & Configuration: To Configuration (monotone mds)", U"Dissimilarity & Configuration: To Configuration (monotone mds)...") {
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach")
 		RADIOBUTTON (U"Secondary approach")
 	praat_Dissimilarity_to_Configuration_commonFields (tolerance,maximumNumberOfIterations,numberOfRepetitions)
@@ -595,8 +595,8 @@ DO
 
 FORM (NEW1_Dissimilarity_Configuration_ispline_mds, U"Dissimilarity & Configuration: To Configuration (i-spline mds)", U"Dissimilarity & Configuration: To Configuration (i-spline mds)...") {
 	LABEL (U"", U"Spline smoothing")
-	INTEGERVAR (numberOfInteriorKnots, U"Number of interior knots", U"1")
-	INTEGERVAR (order, U"Order of I-spline", U"1")
+	INTEGER (numberOfInteriorKnots, U"Number of interior knots", U"1")
+	INTEGER (order, U"Order of I-spline", U"1")
 	praat_Dissimilarity_to_Configuration_commonFields (tolerance,maximumNumberOfIterations,numberOfRepetitions)
 	OK
 DO
@@ -637,7 +637,7 @@ DO
 }
 
 FORM (NEW1_Dissimilarity_Configuration_Weight_monotone_mds, U"Dissimilarity & Configuration & Weight: To Configuration (monotone mds)", U"Dissimilarity & Configuration & Weight: To Configuration...") {
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach")
 		RADIOBUTTON (U"Secondary approach")
 	praat_Dissimilarity_to_Configuration_commonFields (tolerance,maximumNumberOfIterations,numberOfRepetitions)
@@ -651,8 +651,8 @@ DO
 
 FORM (NEW1_Dissimilarity_Configuration_Weight_ispline_mds,  U"Dissimilarity & Configuration & Weight: To Configuration (i-spline mds)", U"Dissimilarity & Configuration & Weight: To Configuration...") {
 	LABEL (U"", U"Spline smoothing")
-	INTEGERVAR (numberOfInteriorKnots, U"Number of interior knots", U"1")
-	INTEGERVAR (order, U"Order of I-spline", U"1")
+	INTEGER (numberOfInteriorKnots, U"Number of interior knots", U"1")
+	INTEGER (order, U"Order of I-spline", U"1")
 	praat_Dissimilarity_to_Configuration_commonFields (tolerance,maximumNumberOfIterations,numberOfRepetitions)
 	OK
 DO
@@ -663,10 +663,10 @@ DO
 }
 
 FORM (REAL_Dissimilarity_Configuration_getStress, U"Dissimilarity & Configuration: Get stress",  U"Dissimilarity & Configuration: get stress") {
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach")
 		RADIOBUTTON (U"Secondary approach")
-	RADIOVAR (stressFormula, U"Stress calculation", 1)
+	RADIO (stressFormula, U"Stress calculation", 1)
 		RADIOBUTTON (U"Formula1")
 		RADIOBUTTON (U"Formula2")
 	OK
@@ -704,7 +704,7 @@ DO
 }
 
 FORM (REAL_Dissimilarity_Configuration_monotone_stress, U"Dissimilarity & Configuration: Get stress (monotone mds)", U"Dissimilarity & Configuration: Get stress (monotone mds)...") {
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach")
 		RADIOBUTTON (U"Secondary approach")
 	Dissimilarity_and_Configuration_getStress_addCommonFields (stressMeasure);
@@ -716,8 +716,8 @@ DO
 }
 
 FORM (REAL_Dissimilarity_Configuration_ispline_stress, U"Dissimilarity & Configuration: Get stress (i-spline mds)", U"Dissimilarity & Configuration: Get stress (i-spline mds)...") {
-	INTEGERVAR (numberOfInteriorKnots, U"Number of interior knots", U"1")
-	INTEGERVAR (order, U"Order of I-spline", U"3")
+	INTEGER (numberOfInteriorKnots, U"Number of interior knots", U"1")
+	INTEGER (order, U"Order of I-spline", U"3")
 	Dissimilarity_and_Configuration_getStress_addCommonFields (stressMeasure);
 	OK
 DO
@@ -754,7 +754,7 @@ DO
 }
 
 FORM (REAL_Dissimilarity_Configuration_Weight_monotone_stress, U"Dissimilarity & Configuration & Weight: Get stress (monotone mds)", U"Dissimilarity & Configuration & Weight: Get stress (monotone mds)...") {
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach)")
 		RADIOBUTTON (U"Secondary approach")
 	Dissimilarity_and_Configuration_getStress_addCommonFields (stressMeasure);
@@ -766,8 +766,8 @@ DO
 }
 
 FORM (REAL_Dissimilarity_Configuration_Weight_ispline_stress, U"Dissimilarity & Configuration & Weight: Get stress (i-spline mds)", U"Dissimilarity & Configuration & Weight: Get stress (i-spline mds)...") {
-	INTEGERVAR (numberOfInteriorKnots, U"Number of interior knots", U"1")
-	INTEGERVAR (order, U"Order of I-spline", U"3")
+	INTEGER (numberOfInteriorKnots, U"Number of interior knots", U"1")
+	INTEGER (order, U"Order of I-spline", U"3")
 	Dissimilarity_and_Configuration_getStress_addCommonFields (stressMeasure);
 	OK
 DO
@@ -809,7 +809,7 @@ DO
 }
 
 FORM (GRAPHICS_Dissimilarity_Configuration_drawMonotoneRegression, U"Dissimilarity & Configuration: Draw regression (monotone mds)", U"Dissimilarity & Configuration: Draw regression (monotone mds)...") {
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach)")
 		RADIOBUTTON (U"Secondary approach")
 	praat_Dissimilarity_Configuration_drawing_commonFields(fromProximity,toProximity,fromDistance,toDistance,markSize,markString,garnish)	OK
@@ -820,8 +820,8 @@ DO
 }
 
 FORM (GRAPHICS_Dissimilarity_Configuration_drawISplineRegression, U"Dissimilarity & Configuration: Draw regression (i-spline mds)", U"Dissimilarity & Configuration: Draw regression (i-spline mds)...") {
-	INTEGERVAR (numberOfInteriorKnots, U"Number of interior knots", U"1")
-	INTEGERVAR (order, U"Order of I-spline", U"3")
+	INTEGER (numberOfInteriorKnots, U"Number of interior knots", U"1")
+	INTEGER (order, U"Order of I-spline", U"3")
 	praat_Dissimilarity_Configuration_drawing_commonFields(fromProximity,toProximity,fromDistance,toDistance,markSize,markString,garnish)	OK
 DO
 	GRAPHICS_TWO (Dissimilarity, Configuration)
@@ -831,12 +831,12 @@ DO
 
 FORM (NEW_Dissimilarity_to_Configuration_kruskal, U"Dissimilarity: To Configuration (kruskal)", U"Dissimilarity: To Configuration (kruskal)...") {
 	LABEL (U"", U"Configuration")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
-	NATURALVAR (distanceMetric, U"Distance metric", U"2 (= Euclidean)")
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
+	NATURAL (distanceMetric, U"Distance metric", U"2 (= Euclidean)")
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach")
 		RADIOBUTTON (U"Secondary approach")
-	RADIOVAR (stressFormula, U"Stress calculation", 1)
+	RADIO (stressFormula, U"Stress calculation", 1)
 		RADIOBUTTON (U"Formula1")
 		RADIOBUTTON (U"Formula2")
 	praat_Dissimilarity_to_Configuration_commonFields(tolerance,maximumNumberOfIterations,numberOfRepetitions)	
@@ -849,7 +849,7 @@ DO
 
 FORM (NEW_Dissimilarity_to_Configuration_absolute_mds, U"Dissimilarity: To Configuration (absolute mds)", U"Dissimilarity: To Configuration (absolute mds)...") {
 	LABEL (U"", U"Configuration")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	praat_Dissimilarity_to_Configuration_commonFields(tolerance,maximumNumberOfIterations,numberOfRepetitions)	
 	OK
 DO
@@ -861,7 +861,7 @@ DO
 
 FORM (NEW_Dissimilarity_to_Configuration_ratio_mds, U"Dissimilarity: To Configuration (ratio mds)", U"Dissimilarity: To Configuration (ratio mds)...") {
 	LABEL (U"", U"Configuration")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	praat_Dissimilarity_to_Configuration_commonFields(tolerance,maximumNumberOfIterations,numberOfRepetitions)	
 	OK
 DO
@@ -873,7 +873,7 @@ DO
 
 FORM (NEW_Dissimilarity_to_Configuration_interval_mds, U"Dissimilarity: To Configuration (interval mds)", U"Dissimilarity: To Configuration (interval mds)...") {
 	LABEL (U"", U"Configuration")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	praat_Dissimilarity_to_Configuration_commonFields(tolerance,maximumNumberOfIterations,numberOfRepetitions)	
 	OK
 DO
@@ -885,8 +885,8 @@ DO
 
 FORM (NEW_Dissimilarity_to_Configuration_monotone_mds, U"Dissimilarity: To Configuration (monotone mds)", U"Dissimilarity: To Configuration (monotone mds)...") {
 	LABEL (U"", U"Configuration")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach")
 		RADIOBUTTON (U"Secondary approach")
 	praat_Dissimilarity_to_Configuration_commonFields (tolerance, maximumNumberOfIterations, numberOfRepetitions)	
@@ -900,10 +900,10 @@ DO
 
 FORM (NEW_Dissimilarity_to_Configuration_ispline_mds, U"Dissimilarity: To Configuration (i-spline mds)", U"Dissimilarity: To Configuration (i-spline mds)...") {
 	LABEL (U"", U"Configuration")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	LABEL (U"", U"Spline smoothing")
-	INTEGERVAR (numberOfInteriorKnots, U"Number of interior knots", U"1")
-	INTEGERVAR (order, U"Order of I-spline", U"1")
+	INTEGER (numberOfInteriorKnots, U"Number of interior knots", U"1")
+	INTEGER (order, U"Order of I-spline", U"1")
 	praat_Dissimilarity_to_Configuration_commonFields(tolerance,maximumNumberOfIterations,numberOfRepetitions)	
 	OK
 DO
@@ -918,10 +918,10 @@ DO
 
 FORM (NEW1_Dissimilarity_Weight_ispline_mds, U"Dissimilarity & Weight: To Configuration (i-spline mds)", U"Dissimilarity & Weight: To Configuration (i-spline mds)...") {
 	LABEL (U"", U"Configuration")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	LABEL (U"", U"Spline smoothing")
-	INTEGERVAR (numberOfInteriorKnots, U"Number of interior knots", U"1")
-	INTEGERVAR (order, U"Order of I-spline", U"1")
+	INTEGER (numberOfInteriorKnots, U"Number of interior knots", U"1")
+	INTEGER (order, U"Order of I-spline", U"1")
 	praat_Dissimilarity_to_Configuration_commonFields(tolerance,maximumNumberOfIterations,numberOfRepetitions)	
 	OK
 DO
@@ -936,7 +936,7 @@ DO
 
 FORM (NEW1_Dissimilarity_Weight_absolute_mds, U"Dissimilarity & Weight: To Configuration (absolute mds)", U"Dissimilarity & Weight: To Configuration (absolute mds)...") {
 	LABEL (U"", U"Configuration")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	praat_Dissimilarity_to_Configuration_commonFields(tolerance,maximumNumberOfIterations,numberOfRepetitions)	
 	OK
 DO
@@ -948,7 +948,7 @@ DO
 
 FORM (NEW1_Dissimilarity_Weight_ratio_mds, U"Dissimilarity & Weight: To Configuration (ratio mds)", U"Dissimilarity & Weight: To Configuration (ratio mds)...") {
 	LABEL (U"", U"Configuration")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	praat_Dissimilarity_to_Configuration_commonFields(tolerance,maximumNumberOfIterations,numberOfRepetitions)	
 	OK
 DO
@@ -960,7 +960,7 @@ DO
 
 FORM (NEW1_Dissimilarity_Weight_interval_mds, U"Dissimilarity & Weight: To Configuration (interval mds)", U"Dissimilarity & Weight: To Configuration (interval mds)...") {
 	LABEL (U"", U"Configuration")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	praat_Dissimilarity_to_Configuration_commonFields(tolerance,maximumNumberOfIterations,numberOfRepetitions)	
 	OK
 DO
@@ -972,8 +972,8 @@ DO
 
 FORM (NEW1_Dissimilarity_Weight_monotone_mds, U"Dissimilarity & Weight: To Configuration (monotone mds)", U"Dissimilarity & Weight: To Configuration (monotone mds)...") {
 	LABEL (U"", U"Configuration")
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach")
 		RADIOBUTTON (U"Secondary approach")
 	praat_Dissimilarity_to_Configuration_commonFields(tolerance,maximumNumberOfIterations,numberOfRepetitions)	
@@ -986,7 +986,7 @@ DO
 }
 
 FORM (NEW_Dissimilarity_to_Distance, U"Dissimilarity: To Distance", U"Dissimilarity: To Distance...") {
-	BOOLEANVAR (scale, U"Scale (additive constant)", true)
+	BOOLEAN (scale, U"Scale (additive constant)", true)
 	OK
 DO
 	CONVERT_EACH (Dissimilarity)
@@ -1003,7 +1003,7 @@ DIRECT (NEW_Dissimilarity_to_Weight) {
 /************************* Distance(s) ***************************************/
 
 FORM (NEW_Distance_to_ScalarProduct, U"Distance: To ScalarProduct", U"Distance: To ScalarProduct...") {
-	BOOLEANVAR (scaleSumOfSquares, U"Make sum of squares equal 1.0", true)
+	BOOLEAN (scaleSumOfSquares, U"Make sum of squares equal 1.0", true)
 	OK
 DO
 	CONVERT_EACH (Distance)
@@ -1018,12 +1018,12 @@ DIRECT (NEW_Distance_to_Dissimilarity) {
 }
 
 FORM (NEWMANY_old_Distances_to_Configuration_indscal, U"Distance: To Configuration (indscal)", U"Distance: To Configuration (indscal)...") {
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
-	BOOLEANVAR (normalizeScalarProducts, U"Normalize scalar products", true)
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
+	BOOLEAN (normalizeScalarProducts, U"Normalize scalar products", true)
 	LABEL (U"", U"Minimization parameters")
-	REALVAR (tolerance, U"Tolerance", U"1e-5")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"100 (= each repetition)")
-	NATURALVAR (numberOfRepetitions, U"Number of repetitions", U"1")
+	REAL (tolerance, U"Tolerance", U"1e-5")
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100 (= each repetition)")
+	NATURAL (numberOfRepetitions, U"Number of repetitions", U"1")
 	OK
 DO
 	FIND_LIST (Distance)
@@ -1036,14 +1036,14 @@ DO
 }
 
 FORM (NEWMANY_Distances_to_Configuration_indscal, U"Distance: To Configuration (indscal)", U"Distance: To Configuration (indscal)...") {
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
-	BOOLEANVAR (normalizeScalarProducts, U"Normalize scalar products", true)
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
+	BOOLEAN (normalizeScalarProducts, U"Normalize scalar products", true)
 	LABEL (U"", U"Minimization parameters")
-	REALVAR (tolerance, U"Tolerance", U"1e-5")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"100 (= each repetition)")
-	NATURALVAR (numberOfRepetitions, U"Number of repetitions", U"1")
-	BOOLEANVAR (wantSalience, U"Want Salience", true)
-	BOOLEANVAR (showProgressInfo, U"Show progress info", false)
+	REAL (tolerance, U"Tolerance", U"1e-5")
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100 (= each repetition)")
+	NATURAL (numberOfRepetitions, U"Number of repetitions", U"1")
+	BOOLEAN (wantSalience, U"Want Salience", true)
+	BOOLEAN (showProgressInfo, U"Show progress info", false)
 	OK
 DO_ALTERNATIVE (NEWMANY_old_Distances_to_Configuration_indscal)
 	FIND_LIST (Distance)
@@ -1058,13 +1058,13 @@ DO_ALTERNATIVE (NEWMANY_old_Distances_to_Configuration_indscal)
 }
 
 FORM (GRAPHICS_Distance_and_Configuration_drawScatterDiagram, U"Distance & Configuration: Draw scatter diagram", U"Distance & Configuration: Draw scatter diagram...") {
-	REALVAR (xmin, U"Minimum x-distance", U"0.0")
-	REALVAR (xmax, U"Maximum x-distance", U"0.0")
-	REALVAR (ymin, U"Minimum y-distance", U"0.0")
-	REALVAR (ymax, U"Maximum y-distance", U"0.0")
-	POSITIVEVAR (markSize, U"Mark size (mm)", U"1.0")
-	SENTENCEVAR (markString, U"Mark string (+xo.)", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (xmin, U"Minimum x-distance", U"0.0")
+	REAL (xmax, U"Maximum x-distance", U"0.0")
+	REAL (ymin, U"Minimum y-distance", U"0.0")
+	REAL (ymax, U"Maximum y-distance", U"0.0")
+	POSITIVE (markSize, U"Mark size (mm)", U"1.0")
+	SENTENCE (markString, U"Mark string (+xo.)", U"+")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (Distance, Configuration)
@@ -1073,10 +1073,10 @@ DO
 }
 
 FORM (NEWMANY_Distance_Configuration_indscal, U"Distance & Configuration: To Configuration (indscal)", U"Distance & Configuration: To Configuration (indscal)...") {
-	BOOLEANVAR (normalizeScalarProducts, U"Normalize scalar products", true)
+	BOOLEAN (normalizeScalarProducts, U"Normalize scalar products", true)
 	LABEL (U"", U"Minimization parameters")
-	REALVAR (tolerance, U"Tolerance", U"1e-5")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"100 (= each repetition)")
+	REAL (tolerance, U"Tolerance", U"1e-5")
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100 (= each repetition)")
 	OK
 DO
 	FIND_ONE_AND_LIST (Configuration, Distance)
@@ -1089,7 +1089,7 @@ DO
 }
 
 FORM (REAL_Distance_Configuration_vaf, U"Distance & Configuration: Get VAF", U"Distance & Configuration: Get VAF...") {
-	BOOLEANVAR (normalizeScalarProducts, U"Normalize scalar products", true)
+	BOOLEAN (normalizeScalarProducts, U"Normalize scalar products", true)
 	OK
 DO
 	NUMBER_ONE_AND_LIST (Configuration, Distance)
@@ -1099,7 +1099,7 @@ DO
 }
 
 FORM (REAL_Distance_Configuration_Salience_vaf, U"Distance & Configuration & Salience: Get VAF", U"Distance & Configuration & Salience: Get VAF...") {
-	BOOLEANVAR (normalizeScalarProducts, U"Normalize scalar products", true)
+	BOOLEAN (normalizeScalarProducts, U"Normalize scalar products", true)
 	OK
 DO
 	NUMBER_TWO_AND_LIST (Configuration, Salience, Distance)
@@ -1109,10 +1109,10 @@ DO
 }
 
 FORM (REAL_Dissimilarity_Configuration_Salience_vaf, U"Dissimilarity & Configuration & Salience: Get VAF", U"Dissimilarity & Configuration & Salience: Get VAF...") {
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach")
 		RADIOBUTTON (U"Secondary approach")
-	BOOLEANVAR (normalizeScalarProducts, U"Normalize scalar products", true)
+	BOOLEAN (normalizeScalarProducts, U"Normalize scalar products", true)
 	OK
 DO
 	NUMBER_TWO_AND_LIST (Configuration, Salience, Dissimilarity)
@@ -1122,10 +1122,10 @@ DO
 }
 
 FORM (NEWMANY_Distance_Configuration_Salience_indscal, U"Distance & Configuration & Salience: To Configuration (indscal)", U"Distance & Configuration & Salience: To Configuration (indscal)...") {
-	BOOLEANVAR (normalizeScalarProducts, U"Normalize scalar products", true)
+	BOOLEAN (normalizeScalarProducts, U"Normalize scalar products", true)
 	LABEL (U"", U"Minimization parameters")
-	REALVAR (tolerance, U"Tolerance", U"1e-5")
-	NATURALVAR (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
+	REAL (tolerance, U"Tolerance", U"1e-5")
+	NATURAL (maximumNumberOfIterations, U"Maximum number of iterations", U"100")
 	OK
 DO
 	FIND_TWO_AND_LIST (Configuration, Salience, Distance)
@@ -1138,9 +1138,9 @@ DO
 }
 
 FORM (NEWMANY_Distances_to_Configuration_ytl, U"Distance: To Configuration (ytl)", U"Distance: To Configuration (ytl)...") {
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
-	BOOLEANVAR (normalizeScalarProducts, U"Normalize scalar products", true)
-	BOOLEANVAR (wantSalienceObject, U"Salience object", false)
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
+	BOOLEAN (normalizeScalarProducts, U"Normalize scalar products", true)
+	BOOLEAN (wantSalienceObject, U"Salience object", false)
 	OK
 DO
 	FIND_LIST (Distance)
@@ -1155,7 +1155,7 @@ DO
 }
 
 FORM (NEW1_Dissimilarity_Distance_monotoneRegression, U"Dissimilarity & Distance: Monotone regression", nullptr) {
-	RADIOVAR (tiesHandling, U"Handling of ties", 1)
+	RADIO (tiesHandling, U"Handling of ties", 1)
 		RADIOBUTTON (U"Primary approach")
 		RADIOBUTTON (U"Secondary approach")
 	OK
@@ -1166,13 +1166,13 @@ DO
 }
 
 FORM (GRAPHICS_Distance_Dissimilarity_drawShepardDiagram, U"Distance & Dissimilarity: Draw Shepard diagram", nullptr) {
-	REALVAR (fromDissimilarity, U"left dissimilarity range", U"0.0")
-	REALVAR (toDissimilarity, U"right dissimilarity range", U"0.0")
-	REALVAR (fromDistance, U"left Distance range", U"0.0")
-	REALVAR (toDistance, U"right Distance range", U"0.0")
-	POSITIVEVAR (markSize, U"Mark size (mm)", U"1.0")
-	SENTENCEVAR (markString, U"Mark string (+xo.)", U"+")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromDissimilarity, U"left dissimilarity range", U"0.0")
+	REAL (toDissimilarity, U"right dissimilarity range", U"0.0")
+	REAL (fromDistance, U"left Distance range", U"0.0")
+	REAL (toDistance, U"right Distance range", U"0.0")
+	POSITIVE (markSize, U"Mark size (mm)", U"1.0")
+	SENTENCE (markString, U"Mark string (+xo.)", U"+")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (Dissimilarity, Distance)
@@ -1189,9 +1189,9 @@ DIRECT (HELP_MDS_help) {
 
 
 FORM (GRAPHICS_Salience_draw, U"Salience: Draw", nullptr) {
-	NATURALVAR (horizontalDimension, U"Horizontal dimension", U"1")
-	NATURALVAR (verticalDimension, U"Vertical dimension", U"2")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	NATURAL (horizontalDimension, U"Horizontal dimension", U"1")
+	NATURAL (verticalDimension, U"Vertical dimension", U"2")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Salience)
@@ -1202,7 +1202,7 @@ DO
 /************************* COVARIANCE & CONFIGURATION  ********************/
 
 FORM (NEW_Covariance_to_Configuration, U"Covariance: To Configuration", nullptr) {
-	NATURALVAR (numberOfDimensions, U"Number of dimensions", U"2")
+	NATURAL (numberOfDimensions, U"Number of dimensions", U"2")
 	OK
 DO
 	CONVERT_EACH (Covariance)
@@ -1281,7 +1281,7 @@ DIRECT (REAL_TableOfReal_getTableNorm) {
 }
 
 FORM (MODIFY_TableOfReal_normalizeTable, U"TableOfReal: Normalize table", U"TableOfReal: Normalize table...") {
-	POSITIVEVAR (norm, U"Norm", U"1.0")
+	POSITIVE (norm, U"Norm", U"1.0")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -1290,7 +1290,7 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_normalizeRows, U"TableOfReal: Normalize rows", U"TableOfReal: Normalize rows...") {
-	POSITIVEVAR (norm, U"Norm", U"1.0")
+	POSITIVE (norm, U"Norm", U"1.0")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -1299,7 +1299,7 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_normalizeColumns, U"TableOfReal: Normalize columns", U"TableOfReal: Normalize columns...") {
-	POSITIVEVAR (norm, U"Norm", U"1.0")
+	POSITIVE (norm, U"Norm", U"1.0")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
diff --git a/fon/PointProcess.cpp b/fon/PointProcess.cpp
index 35997bc..7b0b707 100644
--- a/fon/PointProcess.cpp
+++ b/fon/PointProcess.cpp
@@ -205,6 +205,31 @@ void PointProcess_addPoint (PointProcess me, double t) {
 	}
 }
 
+void PointProcess_addPoints (PointProcess me, numvec times) {
+	try {
+		integer newNumberOfPoints = my nt + times.size;
+		if (newNumberOfPoints > my maxnt) {
+			integer newMaxnt = newNumberOfPoints + my maxnt;   // this is at least a doubling
+			/*
+				Create without change.
+			*/
+			autoNUMvector <double> newTimes (1, newMaxnt);
+			NUMvector_copyElements (my t, newTimes.peek(), 1, my nt);
+			/*
+				Change without error.
+			*/
+			NUMvector_free (my t, 1);
+			my t = newTimes.transfer();
+			my maxnt = newMaxnt;
+		}
+		NUMvector_copyElements (times.at, & my t [my nt], 1, times.size);
+		my nt += times.size;
+		NUMsort_d (newNumberOfPoints, my t);
+	} catch (MelderError) {
+		Melder_throw (me, U": points not added.");
+	}
+}
+
 void PointProcess_removePoint (PointProcess me, integer pointNumber) {
 	if (pointNumber < 1 || pointNumber > my nt) return;
 	for (integer i = pointNumber; i < my nt; i ++)
diff --git a/fon/PointProcess.h b/fon/PointProcess.h
index 282dfe1..cba1e68 100644
--- a/fon/PointProcess.h
+++ b/fon/PointProcess.h
@@ -31,6 +31,7 @@ integer PointProcess_getHighIndex (PointProcess me, double t);
 integer PointProcess_getNearestIndex (PointProcess me, double t);
 integer PointProcess_getWindowPoints (PointProcess me, double tmin, double tmax, integer *p_imin, integer *p_imax);
 void PointProcess_addPoint (PointProcess me, double t);
+void PointProcess_addPoints (PointProcess me, numvec times);
 integer PointProcess_findPoint (PointProcess me, double t);
 void PointProcess_removePoint (PointProcess me, integer index);
 void PointProcess_removePointNear (PointProcess me, double t);
diff --git a/fon/Sampled.h b/fon/Sampled.h
index 75bd068..01fd38b 100644
--- a/fon/Sampled.h
+++ b/fon/Sampled.h
@@ -35,6 +35,13 @@ static inline integer Sampled_xToLowIndex     (Sampled me, double x) { return (i
 static inline integer Sampled_xToHighIndex    (Sampled me, double x) { return (integer) ceil  ((x - my x1) / my dx + 1.0); }
 static inline integer Sampled_xToNearestIndex (Sampled me, double x) { return (integer) round ((x - my x1) / my dx + 1.0); }
 
+static inline autonumvec Sampled_getX_numvec (Sampled me) {
+	autonumvec result (my nx, false);
+	for (integer i = 1; i <= my nx; i ++)
+		result [i] = my x1 + (i - 1) * my dx;
+	return result;
+}
+
 integer Sampled_getWindowSamples (Sampled me, double xmin, double xmax, integer *ixmin, integer *ixmax);
 
 void Sampled_init (Sampled me, double xmin, double xmax, integer nx, double dx, double x1);
diff --git a/fon/manual_Script.cpp b/fon/manual_Script.cpp
index 87377fc..e8484ca 100644
--- a/fon/manual_Script.cpp
+++ b/fon/manual_Script.cpp
@@ -715,7 +715,7 @@ CODE (U"3 + - (2 \\^  4) \\-> -13   (exponentiation, negation, addition)")
 CODE (U"3 + 5 / 2 + 3 \\-> 8.5")
 CODE (U"(3 + 5) / (2 + 3) \\-> 1.6")
 NORMAL (U"The operators with the next highest precedence are the #comparison operators "
-	"(=  <>  <  >  <=  >=). These operators always yield 0 (%false) or 1 (%true):")
+	"($$=, <>, <, >, <=, >=$). These operators always yield 0 (%false) or 1 (%true):")
 CODE (U"5 + 6 = 10 \\-> 0      (equal)")
 CODE (U"5 + 6 = 11 \\-> 1")
 CODE (U"5 + 6 <> 10 \\-> 1     (unequal)")
diff --git a/fon/manual_tutorials.cpp b/fon/manual_tutorials.cpp
index 4906149..32b38ea 100644
--- a/fon/manual_tutorials.cpp
+++ b/fon/manual_tutorials.cpp
@@ -22,10 +22,14 @@
 void manual_tutorials_init (ManPages me);
 void manual_tutorials_init (ManPages me) {
 
-MAN_BEGIN (U"What's new?", U"ppgb", 20170916)
+MAN_BEGIN (U"What's new?", U"ppgb", 20170926)
 INTRO (U"Latest changes in Praat.")
 //LIST_ITEM (U"• Manual page about @@drawing a vowel triangle at .")
 
+NORMAL (U"##6.0.33# (26 September 2017)")
+LIST_ITEM (U"• #Pitch: Subtract linear fit...#: correct a bug that prevented computation in the ERB domain.")
+LIST_ITEM (U"• Scripting: made object[xx].xmin work again.")
+LIST_ITEM (U"• Removed a bug in ##Polynomial: Evaluate...# introduced in 6.0.32.")
 NORMAL (U"##6.0.32# (16 September 2017)")
 LIST_ITEM (U"• Table: allow spaces in column names.")
 LIST_ITEM (U"• Settings windows no longer replace your visible expressions with their resulting values.")
diff --git a/fon/praat_ExperimentMFC.cpp b/fon/praat_ExperimentMFC.cpp
index 21f0e94..72b7b46 100644
--- a/fon/praat_ExperimentMFC.cpp
+++ b/fon/praat_ExperimentMFC.cpp
@@ -86,7 +86,7 @@ DIRECT (INTEGER_ResultsMFC_getNumberOfTrials) {
 }
 
 FORM (STRING_ResultsMFC_getResponse, U"ResultsMFC: Get response", nullptr) {
-	NATURAL4 (trial, U"Trial", U"1")
+	NATURAL (trial, U"Trial", U"1")
 	OK
 DO
 	STRING_ONE (ResultsMFC)
@@ -97,7 +97,7 @@ DO
 }
 
 FORM (STRING_ResultsMFC_getStimulus, U"ResultsMFC: Get stimulus", nullptr) {
-	NATURAL4 (trial, U"Trial", U"1")
+	NATURAL (trial, U"Trial", U"1")
 	OK
 DO
 	STRING_ONE (ResultsMFC)
diff --git a/fon/praat_Fon.cpp b/fon/praat_Fon.cpp
index 969219b..31f43a2 100644
--- a/fon/praat_Fon.cpp
+++ b/fon/praat_Fon.cpp
@@ -113,7 +113,7 @@ DO
 
 FORM (GRAPHICS_Cochleagram_paint, U"Paint Cochleagram", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Cochleagram)
@@ -127,7 +127,7 @@ FORM (MODIFY_Cochleagram_formula, U"Cochleagram Formula", U"Cochleagram: Formula
 	LABEL (U"label", U"`x' is time in seconds, `y' is place in Bark")
 	LABEL (U"label", U"y := y1; for row := 1 to nrow do { x := x1; "
 		"for col := 1 to ncol do { self [row, col] := `formula' ; x := x + dx } y := y + dy }")
-	TEXTFIELD4 (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH_WEAK (Cochleagram)
@@ -138,7 +138,7 @@ DO
 // MARK: Analyse
 
 FORM (NEW_Cochleagram_to_Excitation, U"From Cochleagram to Excitation", nullptr) {
-	REAL4 (time, U"Time (s)", U"0.0")
+	REAL (time, U"Time (s)", U"0.0")
 	OK
 DO
 	CONVERT_EACH (Cochleagram)
@@ -159,11 +159,11 @@ DIRECT (NEW_Cochleagram_to_Matrix) {
 // MARK: New
 
 FORM (NEW1_Corpus_create, U"Create Corpus", U"Create Corpus...") {
-	WORD4 (name, U"Name", U"myCorpus")
+	WORD (name, U"Name", U"myCorpus")
 	LABEL (U"", U"Folder with sound files:")
-	TEXTFIELD4 (folderWithSoundFiles, U"folderWithSoundFiles", U"")
+	TEXTFIELD (folderWithSoundFiles, U"folderWithSoundFiles", U"")
 	LABEL (U"", U"Folder with annotation files:")
-	TEXTFIELD4 (folderWithAnnotationFiles, U"folderWithAnnotationFiles", U"")
+	TEXTFIELD (folderWithAnnotationFiles, U"folderWithAnnotationFiles", U"")
 	OK
 DO
 END }
@@ -182,8 +182,8 @@ DIRECT (WINDOW_Corpus_edit) {
 // MARK: - DISTRIBUTIONS
 
 FORM (NEW_Distributions_to_Transition, U"To Transition", nullptr) {
-	NATURAL4 (environment, U"Environment", U"1")
-	BOOLEAN4 (greedy, U"Greedy", true)
+	NATURAL (environment, U"Environment", U"1")
+	BOOLEAN (greedy, U"Greedy", true)
 	OK
 DO
 	CONVERT_EACH (Distributions)
@@ -192,8 +192,8 @@ DO
 }
 
 FORM (NEW1_Distributions_to_Transition_adj, U"To Transition", nullptr) {
-	NATURAL4 (environment, U"Environment", U"1")
-	BOOLEAN4 (greedy, U"Greedy", true)
+	NATURAL (environment, U"Environment", U"1")
+	BOOLEAN (greedy, U"Greedy", true)
 	OK
 DO
 	CONVERT_TWO (Distributions, Transition)
@@ -202,8 +202,8 @@ DO
 }
 
 FORM (NEW1_Distributions_to_Transition_noise, U"To Transition (noise)", nullptr) {
-	NATURAL4 (environment, U"Environment", U"1")
-	BOOLEAN4 (greedy, U"Greedy", true)
+	NATURAL (environment, U"Environment", U"1")
+	BOOLEAN (greedy, U"Greedy", true)
 	OK
 DO
 	CONVERT_COUPLE (Distributions)
@@ -212,8 +212,8 @@ DO
 }
 
 FORM (NEW1_Distributions_to_Transition_noise_adj, U"To Transition (noise)", nullptr) {
-	NATURAL4 (environment, U"Environment", U"1")
-	BOOLEAN4 (greedy, U"Greedy", true)
+	NATURAL (environment, U"Environment", U"1")
+	BOOLEAN (greedy, U"Greedy", true)
 	OK
 DO
 	CONVERT_COUPLE_AND_ONE (Distributions, Transition)
@@ -240,11 +240,11 @@ DIRECT (HELP_Excitation_help) {
 // MARK: Draw
 
 FORM (GRAPHICS_Excitation_draw, U"Draw Excitation", nullptr) {
-	REAL4 (fromFrequency, U"From frequency (Bark)", U"0.0")
-	REAL4 (toFrequency, U"To frequency (Bark)", U"25.6")
-	REAL4 (minimum, U"Minimum (phon)", U"0.0")
-	REAL4 (maximum, U"Maximum (phon)", U"100.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"From frequency (Bark)", U"0.0")
+	REAL (toFrequency, U"To frequency (Bark)", U"25.6")
+	REAL (minimum, U"Minimum (phon)", U"0.0")
+	REAL (maximum, U"Maximum (phon)", U"100.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Excitation)
@@ -265,7 +265,7 @@ DIRECT (REAL_Excitation_getLoudness) {
 FORM (MODIFY_Excitation_formula, U"Excitation Formula", U"Excitation: Formula...") {
 	LABEL (U"label", U"`x' is the place in Bark, `col' is the bin number")
 	LABEL (U"label", U"x := 0;   for col := 1 to ncol do { self [1, col] := `formula' ; x := x + dx }")
-	TEXTFIELD4 (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH_WEAK (Excitation)
@@ -276,7 +276,7 @@ DO
 // MARK: Convert
 
 FORM (NEW_Excitation_to_Formant, U"From Excitation to Formant", 0) {
-	NATURAL4 (maximumNumberOfFormants, U"Maximum number of formants", U"20")
+	NATURAL (maximumNumberOfFormants, U"Maximum number of formants", U"20")
 	OK
 DO
 	CONVERT_EACH (Excitation)
@@ -302,9 +302,9 @@ DIRECT (HELP_Formant_help) {
 
 FORM (GRAPHICS_Formant_drawSpeckles, U"Draw Formant", U"Formant: Draw speckles...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	POSITIVEVAR (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
-	REALVAR (dynamicRange, U"Dynamic range (dB)", U"30.0")
-	BOOLEANVAR (garnish, U"Garnish", 1)
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
+	REAL (dynamicRange, U"Dynamic range (dB)", U"30.0")
+	BOOLEAN (garnish, U"Garnish", 1)
 	OK
 DO
 	GRAPHICS_EACH (Formant)
@@ -314,8 +314,8 @@ DO
 
 FORM (GRAPHICS_Formant_drawTracks, U"Draw formant tracks", U"Formant: Draw tracks...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	POSITIVEVAR (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
-	BOOLEANVAR (garnish, U"Garnish", 1)
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
+	BOOLEAN (garnish, U"Garnish", 1)
 	OK
 DO
 	GRAPHICS_EACH (Formant)
@@ -325,15 +325,15 @@ DO
 
 FORM (GRAPHICS_Formant_scatterPlot, U"Formant: Scatter plot", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	NATURAL4 (horizontalFormantNumber, U"Horizontal formant number", U"2")
-	REAL4 (left, U"left Horizontal range (Hz)", U"3000.0")
-	REAL4 (right, U"right Horizontal range (Hz)", U"400.0")
-	NATURAL4 (verticalFormantNumber, U"Vertical formant number", U"1")
-	REAL4 (bottom, U"left Vertical range (Hz)", U"1500.0")
-	REAL4 (top, U"right Vertical range (Hz)", U"100.0")
-	POSITIVE4 (markSize, U"Mark size (mm)", U"1.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
-	SENTENCE4 (markString, U"Mark string (+xo.)", U"+")
+	NATURAL (horizontalFormantNumber, U"Horizontal formant number", U"2")
+	REAL (left, U"left Horizontal range (Hz)", U"3000.0")
+	REAL (right, U"right Horizontal range (Hz)", U"400.0")
+	NATURAL (verticalFormantNumber, U"Vertical formant number", U"1")
+	REAL (bottom, U"left Vertical range (Hz)", U"1500.0")
+	REAL (top, U"right Vertical range (Hz)", U"100.0")
+	POSITIVE (markSize, U"Mark size (mm)", U"1.0")
+	BOOLEAN (garnish, U"Garnish", true)
+	SENTENCE (markString, U"Mark string (+xo.)", U"+")
 	OK
 DO
 	GRAPHICS_EACH (Formant)
@@ -346,14 +346,14 @@ DO
 // MARK: Tabulate
 
 FORM (LIST_Formant_list, U"Formant: List", nullptr) {
-	BOOLEAN4 (includeFrameNumber, U"Include frame number", false)
-	BOOLEAN4 (includeTime, U"Include time", true)
-	NATURAL4 (numberOfTimeDecimals, U"Number of time decimals", U"6")
-	BOOLEAN4 (includeIntensity, U"Include intensity", false)
-	NATURAL4 (numberOfIntensityDecimals, U"Number of intensity decimals", U"3")
-	BOOLEAN4 (includeNumberOfFormants, U"Include number of formants", true)
-	NATURAL4 (numberOfFrequencyDecimals, U"Number of frequency decimals", U"3")
-	BOOLEAN4 (includeBandwidths, U"Include bandwidths", true)
+	BOOLEAN (includeFrameNumber, U"Include frame number", false)
+	BOOLEAN (includeTime, U"Include time", true)
+	NATURAL (numberOfTimeDecimals, U"Number of time decimals", U"6")
+	BOOLEAN (includeIntensity, U"Include intensity", false)
+	NATURAL (numberOfIntensityDecimals, U"Number of intensity decimals", U"3")
+	BOOLEAN (includeNumberOfFormants, U"Include number of formants", true)
+	NATURAL (numberOfFrequencyDecimals, U"Number of frequency decimals", U"3")
+	BOOLEAN (includeBandwidths, U"Include bandwidths", true)
 	OK
 DO
 	INFO_ONE (Formant)
@@ -364,14 +364,14 @@ DO
 }
 
 FORM (NEW_Formant_downto_Table, U"Formant: Down to Table", nullptr) {
-	BOOLEAN4 (includeFrameNumber, U"Include frame number", false)
-	BOOLEAN4 (includeTime, U"Include time", true)
-	NATURAL4 (numberOfTimeDecimals, U"Number of time decimals", U"6")
-	BOOLEAN4 (includeIntensity, U"Include intensity", false)
-	NATURAL4 (numberOfIntensityDecimals, U"Number of intensity decimals", U"3")
-	BOOLEAN4 (includeNumberOfFormants, U"Include number of formants", true)
-	NATURAL4 (numberOfFrequencyDecimals, U"Number of frequency decimals", U"3")
-	BOOLEAN4 (includeBandwidths, U"Include bandwidths", true)
+	BOOLEAN (includeFrameNumber, U"Include frame number", false)
+	BOOLEAN (includeTime, U"Include time", true)
+	NATURAL (numberOfTimeDecimals, U"Number of time decimals", U"6")
+	BOOLEAN (includeIntensity, U"Include intensity", false)
+	NATURAL (numberOfIntensityDecimals, U"Number of intensity decimals", U"3")
+	BOOLEAN (includeNumberOfFormants, U"Include number of formants", true)
+	NATURAL (numberOfFrequencyDecimals, U"Number of frequency decimals", U"3")
+	BOOLEAN (includeBandwidths, U"Include bandwidths", true)
 	OK
 DO
 	CONVERT_EACH (Formant)
@@ -384,12 +384,12 @@ DO
 // MARK: Query
 
 FORM (REAL_Formant_getValueAtTime, U"Formant: Get value", U"Formant: Get value at time...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
-	RADIO4x (unit, U"Unit", 1, 0)
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (time, U"Time (s)", U"0.5")
+	RADIOx (unit, U"Unit", 1, 0)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
-	RADIO4 (interpolation, U"Interpolation", 1)   // ignored
+	RADIO (interpolation, U"Interpolation", 1)   // ignored
 		RADIOBUTTON (U"Linear")
 	OK
 DO
@@ -399,12 +399,12 @@ DO
 }
 
 FORM (REAL_Formant_getBandwidthAtTime, U"Formant: Get bandwidth", U"Formant: Get bandwidth at time...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
-	RADIO4x (unit, U"Unit", 1, 0)
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (time, U"Time (s)", U"0.5")
+	RADIOx (unit, U"Unit", 1, 0)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
-	RADIO4 (interpolation, U"Interpolation", 1)   // ignored
+	RADIO (interpolation, U"Interpolation", 1)   // ignored
 		RADIOBUTTON (U"Linear")
 	OK
 DO
@@ -414,12 +414,12 @@ DO
 }
 
 FORM (REAL_Formant_getMinimum, U"Formant: Get minimum", U"Formant: Get minimum...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	RADIO4x (unit, U"Unit", 1, 0)
+	RADIOx (unit, U"Unit", 1, 0)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
-	RADIO4x (interpolation, U"Interpolation", 2, 0)
+	RADIOx (interpolation, U"Interpolation", 2, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 	OK
@@ -430,12 +430,12 @@ DO
 }
 
 FORM (REAL_Formant_getMaximum, U"Formant: Get maximum", U"Formant: Get maximum...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	RADIO4x (unit, U"Unit", 1, 0)
+	RADIOx (unit, U"Unit", 1, 0)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
-	RADIO4x (interpolation, U"Interpolation", 2, 0)
+	RADIOx (interpolation, U"Interpolation", 2, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 	OK
@@ -446,12 +446,12 @@ DO
 }
 
 FORM (REAL_Formant_getTimeOfMinimum, U"Formant: Get time of minimum", U"Formant: Get time of minimum...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	RADIO4x (unit, U"Unit", 1, 0)
+	RADIOx (unit, U"Unit", 1, 0)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
-	RADIO4x (interpolation, U"Interpolation", 2, 0)
+	RADIOx (interpolation, U"Interpolation", 2, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 	OK
@@ -462,12 +462,12 @@ DO
 }
 
 FORM (REAL_Formant_getTimeOfMaximum, U"Formant: Get time of maximum", U"Formant: Get time of maximum...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	RADIO4x (unit, U"Unit", 1, 0)
+	RADIOx (unit, U"Unit", 1, 0)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
-	RADIO4x (interpolation, U"Interpolation", 2, 0)
+	RADIOx (interpolation, U"Interpolation", 2, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 	OK
@@ -484,9 +484,9 @@ DIRECT (INTEGER_Formant_getMaximumNumberOfFormants) {
 }
 
 FORM (REAL_Formant_getMean, U"Formant: Get mean", U"Formant: Get mean...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	RADIO4x (unit, U"Unit", 1, 0)
+	RADIOx (unit, U"Unit", 1, 0)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
 	OK
@@ -503,7 +503,7 @@ DIRECT (INTEGER_Formant_getMinimumNumberOfFormants) {
 }
 
 FORM (INTEGER_Formant_getNumberOfFormants, U"Formant: Get number of formants", U"Formant: Get number of formants...") {
-	NATURAL4 (frameNumber, U"Frame number", U"1")
+	NATURAL (frameNumber, U"Frame number", U"1")
 	OK
 DO
 	NUMBER_ONE (Formant)
@@ -514,12 +514,12 @@ DO
 }
 
 FORM (REAL_Formant_getQuantile, U"Formant: Get quantile", nullptr) {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	RADIO4 (unit, U"Unit", 1)
+	RADIO (unit, U"Unit", 1)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
-	REAL4 (quantile, U"Quantile", U"0.50 (= median)")
+	REAL (quantile, U"Quantile", U"0.50 (= median)")
 	OK
 DO
 	NUMBER_ONE (Formant)
@@ -528,12 +528,12 @@ DO
 }
 
 FORM (REAL_Formant_getQuantileOfBandwidth, U"Formant: Get quantile of bandwidth", nullptr) {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	RADIO4 (unit, U"Unit", 1)
+	RADIO (unit, U"Unit", 1)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
-	REAL4 (quantile, U"Quantile", U"0.50 (= median)")
+	REAL (quantile, U"Quantile", U"0.50 (= median)")
 	OK
 DO
 	NUMBER_ONE (Formant)
@@ -542,9 +542,9 @@ DO
 }
 
 FORM (REAL_Formant_getStandardDeviation, U"Formant: Get standard deviation", nullptr) {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
+	NATURAL (formantNumber, U"Formant number", U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	RADIO4 (unit, U"Unit", 1)
+	RADIO (unit, U"Unit", 1)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Bark")
 	OK
@@ -564,7 +564,7 @@ DIRECT (MODIFY_Formant_sort) {
 
 FORM (MODIFY_Formant_formula_frequencies, U"Formant: Formula (frequencies)", U"Formant: Formula (frequencies)...") {
 	LABEL (U"", U"row is formant number, col is frame number: for row from 1 to nrow do for col from 1 to ncol do F (row, col) :=")
-	TEXTFIELD4 (formula, U"formula", U"if row = 2 then self + 200 else self fi")
+	TEXTFIELD (formula, U"formula", U"if row = 2 then self + 200 else self fi")
 	OK
 DO
 	MODIFY_EACH_WEAK (Formant)
@@ -574,7 +574,7 @@ DO
 
 FORM (MODIFY_Formant_formula_bandwidths, U"Formant: Formula (bandwidths)", U"Formant: Formula (bandwidths)...") {
 	LABEL (U"", U"row is formant number, col is frame number: for row from 1 to nrow do for col from 1 to ncol do B (row, col) :=")
-	TEXTFIELD4 (formula, U"formula", U"self / 2 ; sharpen all peaks")
+	TEXTFIELD (formula, U"formula", U"self / 2 ; sharpen all peaks")
 	OK
 DO
 	MODIFY_EACH_WEAK (Formant)
@@ -585,15 +585,15 @@ DO
 // MARK: Convert
 
 FORM (NEW_Formant_tracker, U"Formant tracker", U"Formant: Track...") {
-	NATURAL4 (numberOfTracks, U"Number of tracks (1-5)", U"3")
-	REAL4 (referenceF1, U"Reference F1 (Hz)", U"550")
-	REAL4 (referenceF2, U"Reference F2 (Hz)", U"1650")
-	REAL4 (referenceF3, U"Reference F3 (Hz)", U"2750")
-	REAL4 (referenceF4, U"Reference F4 (Hz)", U"3850")
-	REAL4 (referenceF5, U"Reference F5 (Hz)", U"4950")
-	REAL4 (frequencyCost, U"Frequency cost (/kHz)", U"1.0")
-	REAL4 (bandwidthCost, U"Bandwidth cost", U"1.0")
-	REAL4 (transitionCost, U"Transition cost (/octave)", U"1.0")
+	NATURAL (numberOfTracks, U"Number of tracks (1-5)", U"3")
+	REAL (referenceF1, U"Reference F1 (Hz)", U"550")
+	REAL (referenceF2, U"Reference F2 (Hz)", U"1650")
+	REAL (referenceF3, U"Reference F3 (Hz)", U"2750")
+	REAL (referenceF4, U"Reference F4 (Hz)", U"3850")
+	REAL (referenceF5, U"Reference F5 (Hz)", U"4950")
+	REAL (frequencyCost, U"Frequency cost (/kHz)", U"1.0")
+	REAL (bandwidthCost, U"Bandwidth cost", U"1.0")
+	REAL (transitionCost, U"Transition cost (/octave)", U"1.0")
 	OK
 DO
 	if (numberOfTracks > 5) Melder_throw (U"Your number of tracks should not be more than 5.");
@@ -617,7 +617,7 @@ DIRECT (NEW_Formant_downto_FormantTier) {
 }
 
 FORM (NEW_Formant_to_Matrix, U"From Formant to Matrix", nullptr) {
-	INTEGER4 (formantNumber, U"Formant number", U"1")
+	INTEGER (formantNumber, U"Formant number", U"1")
 	OK
 DO
 	CONVERT_EACH (Formant)
@@ -659,8 +659,8 @@ DIRECT (HELP_Harmonicity_help) {
 
 FORM (GRAPHICS_Harmonicity_draw, U"Draw harmonicity", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (minimum, U"Minimum", U"0.0")
-	REALVAR (maximum, U"Maximum", U"0.0 (= auto)")
+	REAL (minimum, U"Minimum", U"0.0")
+	REAL (maximum, U"Maximum", U"0.0 (= auto)")
 	OK
 DO
 	LOOP {
@@ -736,7 +736,7 @@ DO
 }
 
 FORM (REAL_Harmonicity_getValueInFrame, U"Get value in frame", U"Harmonicity: Get value in frame...") {
-	INTEGER4 (frameNumber, U"Frame number", U"10")
+	INTEGER (frameNumber, U"Frame number", U"10")
 	OK
 DO
 	NUMBER_ONE (Harmonicity)
@@ -749,7 +749,7 @@ DO
 FORM (MODIFY_Harmonicity_formula, U"Harmonicity Formula", U"Harmonicity: Formula...") {
 	LABEL (U"label", U"x is time")
 	LABEL (U"label", U"for col := 1 to ncol do { self [col] := `formula' ; x := x + dx }")
-	TEXTFIELD4 (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH_WEAK (Harmonicity)
@@ -777,9 +777,9 @@ DIRECT (HELP_Intensity_help) {
 
 FORM (GRAPHICS_Intensity_draw, U"Draw Intensity", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REAL4 (minimum, U"Minimum (dB)", U"0.0")
-	REAL4 (maximum, U"Maximum (dB)", U"0.0 (= auto)")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (minimum, U"Minimum (dB)", U"0.0")
+	REAL (maximum, U"Maximum (dB)", U"0.0 (= auto)")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Intensity)
@@ -799,7 +799,7 @@ DO
 }
 
 FORM (REAL_Intensity_getValueInFrame, U"Get value in frame", U"Intensity: Get value in frame...") {
-	INTEGERVAR (frameNumber, U"Frame number", U"10")
+	INTEGER (frameNumber, U"Frame number", U"10")
 	OK
 DO
 	NUMBER_ONE (Intensity)
@@ -845,7 +845,7 @@ DO
 
 FORM (REAL_Intensity_getQuantile, U"Intensity: Get quantile", 0) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REAL4 (quantile, U"Quantile (0-1)", U"0.50")
+	REAL (quantile, U"Quantile (0-1)", U"0.50")
 	OK
 DO
 	NUMBER_ONE (Intensity)
@@ -864,7 +864,7 @@ DO
 
 FORM (REAL_Intensity_getMean, U"Intensity: Get mean", U"Intensity: Get mean...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	RADIO4 (averagingMethod, U"Averaging method", 1)
+	RADIO (averagingMethod, U"Averaging method", 1)
 		RADIOBUTTON (U"energy")
 		RADIOBUTTON (U"sones")
 		RADIOBUTTON (U"dB")
@@ -889,7 +889,7 @@ DO
 FORM (MODIFY_Intensity_formula, U"Intensity Formula", nullptr) {
 	LABEL (U"label", U"`x' is the time in seconds, `col' is the frame number, `self' is in dB")
 	LABEL (U"label", U"x := x1;   for col := 1 to ncol do { self [col] := `formula' ; x := x + dx }")
-	TEXTFIELD4 (formula, U"formula", U"0")
+	TEXTFIELD (formula, U"formula", U"0")
 	OK
 DO
 	MODIFY_EACH_WEAK (Intensity)
@@ -928,12 +928,12 @@ DIRECT (NEW_Intensity_downto_Matrix) {
 // MARK: - INTENSITY & PITCH
 
 FORM (GRAPHICS_Pitch_Intensity_draw, U"Plot intensity by pitch", nullptr) {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"0.0")
-	REAL4 (toFrequency, U"To frequency (Hz)", U"0.0 (= auto)")
-	REAL4 (fromIntensity, U"From intensity (dB)", U"0.0")
-	REAL4 (toIntensity, U"To intensity (dB)", U"100.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
-	RADIO4 (drawingMethod, U"Drawing method", 1)
+	REAL (fromFrequency, U"From frequency (Hz)", U"0.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"0.0 (= auto)")
+	REAL (fromIntensity, U"From intensity (dB)", U"0.0")
+	REAL (toIntensity, U"To intensity (dB)", U"100.0")
+	BOOLEAN (garnish, U"Garnish", true)
+	RADIO (drawingMethod, U"Drawing method", 1)
 		RADIOBUTTON (U"Speckles")
 		RADIOBUTTON (U"Curve")
 		RADIOBUTTON (U"Speckles and curve")
@@ -982,8 +982,8 @@ DIRECT (NEW1_Ltases_average) {
 }
 
 FORM (NEW_Ltas_computeTrendLine, U"Ltas: Compute trend line", U"Ltas: Compute trend line...") {
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"600.0")
-	POSITIVEVAR (toFrequency, U"right Frequency range (Hz)", U"4000.0")
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"600.0")
+	POSITIVE (toFrequency, U"right Frequency range (Hz)", U"4000.0")
 	OK
 DO
 	CONVERT_EACH (Ltas)
@@ -992,11 +992,11 @@ DO
 }
 
 FORM (GRAPHICS_old_Ltas_draw, U"Ltas: Draw", nullptr) {
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (Hz)", U"0.0 (= all)")
-	REALVAR (fromPower, U"left Power range (dB/Hz)", U"-20.0")
-	REALVAR (toPower, U"right Power range (dB/Hz)", U"80.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"0.0 (= all)")
+	REAL (fromPower, U"left Power range (dB/Hz)", U"-20.0")
+	REAL (toPower, U"right Power range (dB/Hz)", U"80.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Ltas)
@@ -1005,13 +1005,13 @@ DO
 }
 
 FORM (GRAPHICS_Ltas_draw, U"Ltas: Draw", nullptr) {
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (Hz)", U"0.0 (= all)")
-	REALVAR (fromPower, U"left Power range (dB/Hz)", U"-20.0")
-	REALVAR (toPower, U"right Power range (dB/Hz)", U"80.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"0.0 (= all)")
+	REAL (fromPower, U"left Power range (dB/Hz)", U"-20.0")
+	REAL (toPower, U"right Power range (dB/Hz)", U"80.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"")
-	OPTIONMENUSTRVAR (drawingMethod, U"Drawing method", 2)
+	OPTIONMENUSTR (drawingMethod, U"Drawing method", 2)
 		OPTION (U"Curve")
 		OPTION (U"Bars")
 		OPTION (U"Poles")
@@ -1026,7 +1026,7 @@ DO_ALTERNATIVE (GRAPHICS_old_Ltas_draw)
 FORM (MODIFY_Ltas_formula, U"Ltas Formula", nullptr) {
 	LABEL (U"label", U"`x' is the frequency in hertz, `col' is the bin number")
 	LABEL (U"label", U"x := x1;   for col := 1 to ncol do { self [1, col] := `formula' ; x := x + dx }")
-	TEXTFIELD4 (formula, U"formula", U"0")
+	TEXTFIELD (formula, U"formula", U"0")
 	OK
 DO
 	MODIFY_EACH_WEAK (Ltas)
@@ -1053,7 +1053,7 @@ DIRECT (REAL_Ltas_getBinWidth) {
 }
 
 FORM (REAL_Ltas_getFrequencyFromBinNumber, U"Ltas: Get frequency from bin number", U"Ltas: Get frequency from bin number...") {
-	NATURAL4 (binNumber, U"Bin number", U"1")
+	NATURAL (binNumber, U"Bin number", U"1")
 	OK
 DO
 	NUMBER_ONE (Ltas)
@@ -1062,7 +1062,7 @@ DO
 }
 
 FORM (REAL_Ltas_getBinNumberFromFrequency, U"Ltas: Get band from frequency", U"Ltas: Get band from frequency...") {
-	REAL4 (frequency, U"Frequency (Hz)", U"2000.0")
+	REAL (frequency, U"Frequency (Hz)", U"2000.0")
 	OK
 DO
 	NUMBER_ONE (Ltas)
@@ -1071,9 +1071,9 @@ DO
 }
 
 FORM (REAL_Ltas_getFrequencyOfMinimum, U"Ltas: Get frequency of minimum", U"Ltas: Get frequency of minimum...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"0.0")
-	REAL4 (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 1, 0)
+	REAL (fromFrequency, U"From frequency (Hz)", U"0.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 1, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -1087,9 +1087,9 @@ DO
 }
 
 FORM (REAL_Ltas_getFrequencyOfMaximum, U"Ltas: Get frequency of maximum", U"Ltas: Get frequency of maximum...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"0.0")
-	REAL4 (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 1, 0)
+	REAL (fromFrequency, U"From frequency (Hz)", U"0.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 1, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -1103,11 +1103,11 @@ DO
 }
 
 FORM (REAL_Ltas_getLocalPeakHeight, U"Ltas: Get local peak height", nullptr) {
-	REALVAR (environmentMin, U"left Environment (Hz)", U"1700.0")
-	REALVAR (environmentMax, U"right Environment (Hz)", U"4200.0")
-	REALVAR (peakMin, U"left Peak (Hz)", U"2400.0")
-	REALVAR (peakMax, U"right Peak (Hz)", U"3200.0")
-	RADIOVAR (averagingMethod, U"Averaging method", 1)
+	REAL (environmentMin, U"left Environment (Hz)", U"1700.0")
+	REAL (environmentMax, U"right Environment (Hz)", U"4200.0")
+	REAL (peakMin, U"left Peak (Hz)", U"2400.0")
+	REAL (peakMax, U"right Peak (Hz)", U"3200.0")
+	RADIO (averagingMethod, U"Averaging method", 1)
 		RADIOBUTTON (U"energy")
 		RADIOBUTTON (U"sones")
 		RADIOBUTTON (U"dB")
@@ -1125,9 +1125,9 @@ DO
 }
 
 FORM (REAL_Ltas_getMaximum, U"Ltas: Get maximum", U"Ltas: Get maximum...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"0.0")
-	REAL4 (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 1, 0)
+	REAL (fromFrequency, U"From frequency (Hz)", U"0.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 1, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -1141,9 +1141,9 @@ DO
 }
 
 FORM (REAL_Ltas_getMean, U"Ltas: Get mean", U"Ltas: Get mean...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"0.0")
-	REAL4 (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
-	RADIO4 (averagingMethod, U"Averaging method", 1)
+	REAL (fromFrequency, U"From frequency (Hz)", U"0.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
+	RADIO (averagingMethod, U"Averaging method", 1)
 		RADIOBUTTON (U"energy")
 		RADIOBUTTON (U"sones")
 		RADIOBUTTON (U"dB")
@@ -1156,9 +1156,9 @@ DO
 }
 
 FORM (REAL_Ltas_getMinimum, U"Ltas: Get minimum", U"Ltas: Get minimum...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"0.0")
-	REAL4 (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 1, 0)
+	REAL (fromFrequency, U"From frequency (Hz)", U"0.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 1, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -1178,11 +1178,11 @@ DIRECT (INTEGER_Ltas_getNumberOfBins) {
 }
 
 FORM (REAL_Ltas_getSlope, U"Ltas: Get slope", 0) {
-	REAL4 (lowBandFrom, U"left Low band (Hz)", U"0.0")
-	REAL4 (lowBandTo, U"right Low band (Hz)", U"1000.0")
-	REAL4 (highBandFrom, U"left High band (Hz)", U"1000.0")
-	REAL4 (highBandTo, U"right High band (Hz)", U"4000.0")
-	RADIO4 (averagingMethod, U"Averaging method", 1)
+	REAL (lowBandFrom, U"left Low band (Hz)", U"0.0")
+	REAL (lowBandTo, U"right Low band (Hz)", U"1000.0")
+	REAL (highBandFrom, U"left High band (Hz)", U"1000.0")
+	REAL (highBandTo, U"right High band (Hz)", U"4000.0")
+	RADIO (averagingMethod, U"Averaging method", 1)
 		RADIOBUTTON (U"energy")
 		RADIOBUTTON (U"sones")
 		RADIOBUTTON (U"dB")
@@ -1194,9 +1194,9 @@ DO
 }
 
 FORM (REAL_Ltas_getStandardDeviation, U"Ltas: Get standard deviation", U"Ltas: Get standard deviation...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"0.0")
-	REAL4 (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
-	RADIO4 (averagingMethod, U"Averaging method", 1)
+	REAL (fromFrequency, U"From frequency (Hz)", U"0.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"0.0 (= all)")
+	RADIO (averagingMethod, U"Averaging method", 1)
 		RADIOBUTTON (U"energy")
 		RADIOBUTTON (U"sones")
 		RADIOBUTTON (U"dB")
@@ -1211,8 +1211,8 @@ DO
 }
 
 FORM (REAL_Ltas_getValueAtFrequency, U"Ltas: Get value", U"Ltas: Get value at frequency...") {
-	REAL4 (frequency, U"Frequency (Hz)", U"1500.0")
-	RADIO4x (interpolation, U"Interpolation", 1, 0)
+	REAL (frequency, U"Frequency (Hz)", U"1500.0")
+	RADIOx (interpolation, U"Interpolation", 1, 0)
 		RADIOBUTTON (U"Nearest")
 		RADIOBUTTON (U"Linear")
 		RADIOBUTTON (U"Cubic")
@@ -1228,7 +1228,7 @@ DO
 }
 
 FORM (REAL_Ltas_getValueInBin, U"Get value in bin", U"Ltas: Get value in bin...") {
-	INTEGER4 (binNumber, U"Bin number", U"100")
+	INTEGER (binNumber, U"Bin number", U"100")
 	OK
 DO
 	NUMBER_ONE (Ltas)
@@ -1247,8 +1247,8 @@ DIRECT (NEW1_Ltases_merge) {
 }
 
 FORM (NEW_Ltas_subtractTrendLine, U"Ltas: Subtract trend line", U"Ltas: Subtract trend line...") {
-	REAL4 (fromFrequency, U"left Frequency range (Hz)", U"600.0")
-	POSITIVE4 (toFrequency, U"right Frequency range (Hz)", U"4000.0")
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"600.0")
+	POSITIVE (toFrequency, U"right Frequency range (Hz)", U"4000.0")
 	OK
 DO
 	CONVERT_EACH (Ltas)
@@ -1419,14 +1419,14 @@ DIRECT (NEW1_Manipulation_TextTier_to_Manipulation) {
 // MARK: - PARAMCURVE
 
 FORM (GRAPHICS_ParamCurve_draw, U"Draw parametrized curve", nullptr) {
-	REAL4 (tmin, U"Tmin", U"0.0")
-	REAL4 (tmax, U"Tmax", U"0.0")
-	REAL4 (step, U"Step", U"0.0")
-	REAL4 (xmin, U"Xmin", U"0.0")
-	REAL4 (xmax, U"Xmax", U"0.0")
-	REAL4 (ymin, U"Ymin", U"0.0")
-	REAL4 (ymax, U"Ymax", U"0.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (tmin, U"Tmin", U"0.0")
+	REAL (tmax, U"Tmax", U"0.0")
+	REAL (step, U"Step", U"0.0")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0")
+	REAL (ymin, U"Ymin", U"0.0")
+	REAL (ymax, U"Ymax", U"0.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (ParamCurve)
@@ -1454,9 +1454,9 @@ DIRECT (INFO_Pitch_difference) {
 
 FORM (GRAPHICS_Pitch_draw, U"Pitch: Draw", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
-	POSITIVEVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
+	POSITIVE (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	if (toFrequency <= fromFrequency) Melder_throw (U"Maximum frequency must be greater than minimum frequency.");
@@ -1468,9 +1468,9 @@ DO
 
 FORM (GRAPHICS_Pitch_drawErb, U"Pitch: Draw erb", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (ERB)", U"0")
-	REALVAR (toFrequency, U"right Frequency range (ERB)", U"10.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (ERB)", U"0")
+	REAL (toFrequency, U"right Frequency range (ERB)", U"10.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Pitch)
@@ -1481,9 +1481,9 @@ DO
 
 FORM (GRAPHICS_Pitch_drawLogarithmic, U"Pitch: Draw logarithmic", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	POSITIVEVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
-	POSITIVEVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	POSITIVE (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
+	POSITIVE (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	if (toFrequency <= fromFrequency) Melder_throw (U"Maximum frequency must be greater than minimum frequency.");
@@ -1495,9 +1495,9 @@ DO
 
 FORM (GRAPHICS_Pitch_drawMel, U"Pitch: Draw mel", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (mel)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (mel)", U"500.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (mel)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (mel)", U"500.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Pitch)
@@ -1509,9 +1509,9 @@ DO
 FORM (GRAPHICS_Pitch_drawSemitones100, U"Pitch: Draw semitones (re 100 Hz)", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
 	LABEL (U"", U"Range in semitones re 100 Hz:")
-	REALVAR (fromFrequency, U"left Frequency range (st)", U"-12.0")
-	REALVAR (toFrequency, U"right Frequency range (st)", U"30.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (st)", U"-12.0")
+	REAL (toFrequency, U"right Frequency range (st)", U"30.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Pitch)
@@ -1523,9 +1523,9 @@ DO
 FORM (GRAPHICS_Pitch_drawSemitones200, U"Pitch: Draw semitones (re 200 Hz)", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
 	LABEL (U"", U"Range in semitones re 200 Hz:")
-	REALVAR (fromFrequency, U"left Frequency range (st)", U"-24.0")
-	REALVAR (toFrequency, U"right Frequency range (st)", U"18.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (st)", U"-24.0")
+	REAL (toFrequency, U"right Frequency range (st)", U"18.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Pitch)
@@ -1537,9 +1537,9 @@ DO
 FORM (GRAPHICS_Pitch_drawSemitones440, U"Pitch: Draw semitones (re 440 Hz)", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
 	LABEL (U"", U"Range in semitones re 440 Hz:")
-	REALVAR (fromFrequency, U"left Frequency range (st)", U"-36.0")
-	REALVAR (toFrequency, U"right Frequency range (st)", U"6.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (st)", U"-36.0")
+	REAL (toFrequency, U"right Frequency range (st)", U"6.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Pitch)
@@ -1559,7 +1559,7 @@ DIRECT (WINDOW_Pitch_viewAndEdit) {
 
 FORM (MODIFY_Pitch_formula, U"Pitch: Formula", U"Formula...") {
 	LABEL (U"", U"x = time; col = frame; row = candidate (1 = current path); frequency (time, candidate) :=")
-	TEXTFIELD4 (formula, U"formula", U"self*2; Example: octave jump up")
+	TEXTFIELD (formula, U"formula", U"self*2; Example: octave jump up")
 	OK
 DO
 	MODIFY_EACH_WEAK (Pitch)
@@ -1569,45 +1569,45 @@ DO
 
 FORM (REAL_Pitch_getMinimum, U"Pitch: Get minimum", 0) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	OPTIONMENU_ENUMVAR (unit, U"Unit", kPitch_unit, DEFAULT)
-	RADIOVARx (interpolation, U"Interpolation", 2, 0)
+	OPTIONMENU_ENUM (unit, U"Unit", kPitch_unit, DEFAULT)
+	RADIOx (interpolation, U"Interpolation", 2, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 	OK
 DO
 	NUMBER_ONE (Pitch)
-		double result = Pitch_getMinimum (me, fromTime, toTime, (kPitch_unit) unit, interpolation);
-		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, unit);
-	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, unit, 0))
+		double result = Pitch_getMinimum (me, fromTime, toTime, unit, interpolation);
+		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, (int) unit);
+	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, (int) unit, 0))
 }
 
 FORM (REAL_Pitch_getMaximum, U"Pitch: Get maximum", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	OPTIONMENU_ENUMVAR (unit, U"Unit", kPitch_unit, DEFAULT)
-	RADIOVARx (interpolation, U"Interpolation", 2, 0)
+	OPTIONMENU_ENUM (unit, U"Unit", kPitch_unit, DEFAULT)
+	RADIOx (interpolation, U"Interpolation", 2, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 	OK
 DO
 	NUMBER_ONE (Pitch)
-		double result = Pitch_getMaximum (me, fromTime, toTime, (kPitch_unit) unit, interpolation);
-		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, unit);
-	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, unit, 0))
+		double result = Pitch_getMaximum (me, fromTime, toTime, unit, interpolation);
+		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, (int) unit);
+	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, (int) unit, 0))
 }
 
 FORM (REAL_Pitch_getMean, U"Pitch: Get mean", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	OPTIONMENU_ENUMVAR (unit, U"Unit", kPitch_unit, DEFAULT)
+	OPTIONMENU_ENUM (unit, U"Unit", kPitch_unit, DEFAULT)
 	OK
 DO
 	NUMBER_ONE (Pitch)
-		double result = Pitch_getMean (me, fromTime, toTime, (kPitch_unit) unit);
-		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, unit);
-	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, unit, 0));
+		double result = Pitch_getMean (me, fromTime, toTime, unit);
+		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, (int) unit);
+	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, (int) unit, 0));
 }
 
 FORM (REAL_Pitch_getMeanAbsoluteSlope, U"Pitch: Get mean absolute slope", 0) {
-	RADIOVAR (unit, U"Unit", 1)
+	RADIO (unit, U"Unit", 1)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Mel")
 		RADIOBUTTON (U"Semitones")
@@ -1635,19 +1635,19 @@ DIRECT (REAL_Pitch_getMeanAbsSlope_noOctave) {
 
 FORM (REAL_Pitch_getQuantile, U"Pitch: Get quantile", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (quantile, U"Quantile", U"0.50 (= median)")
-	OPTIONMENU_ENUMVAR (unit, U"Unit", kPitch_unit, DEFAULT)
+	REAL (quantile, U"Quantile", U"0.50 (= median)")
+	OPTIONMENU_ENUM (unit, U"Unit", kPitch_unit, DEFAULT)
 	OK
 DO
 	NUMBER_ONE (Pitch)
-		double result = Sampled_getQuantile (me, fromTime, toTime, quantile, Pitch_LEVEL_FREQUENCY, unit);
-		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, unit);
-	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, unit, 0))
+		double result = Sampled_getQuantile (me, fromTime, toTime, quantile, Pitch_LEVEL_FREQUENCY, (int) unit);
+		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, (int) unit);
+	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, (int) unit, 0))
 }
 
 FORM (REAL_Pitch_getStandardDeviation, U"Pitch: Get standard deviation", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	OPTIONMENUVAR (unit_i, U"Unit", 1)
+	OPTIONMENU (unit_i, U"Unit", 1)
 		OPTION (U"Hertz")
 		OPTION (U"mel")
 		OPTION (U"logHertz")
@@ -1674,8 +1674,8 @@ DO
 
 FORM (REAL_Pitch_getTimeOfMaximum, U"Pitch: Get time of maximum", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	OPTIONMENU_ENUMVAR (unit, U"Unit", kPitch_unit, DEFAULT)
-	RADIOVARx (interpolation, U"Interpolation", 2, 0)
+	OPTIONMENU_ENUM (unit, U"Unit", kPitch_unit, DEFAULT)
+	RADIOx (interpolation, U"Interpolation", 2, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 	OK
@@ -1687,8 +1687,8 @@ DO
 
 FORM (REAL_Pitch_getTimeOfMinimum, U"Pitch: Get time of minimum", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	OPTIONMENU_ENUMVAR (unit, U"Unit", kPitch_unit, DEFAULT)
-	RADIOVARx (interpolation, U"Interpolation", 2, 0)
+	OPTIONMENU_ENUM (unit, U"Unit", kPitch_unit, DEFAULT)
+	RADIOx (interpolation, U"Interpolation", 2, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 	OK
@@ -1699,28 +1699,28 @@ DO
 }
 
 FORM (REAL_Pitch_getValueAtTime, U"Pitch: Get value at time", U"Pitch: Get value at time...") {
-	REALVAR (time, U"Time (s)", U"0.5")
-	OPTIONMENU_ENUMVAR (unit, U"Unit", kPitch_unit, DEFAULT)
-	RADIOVARx (interpolation, U"Interpolation", 2, 0)
+	REAL (time, U"Time (s)", U"0.5")
+	OPTIONMENU_ENUM (unit, U"Unit", kPitch_unit, DEFAULT)
+	RADIOx (interpolation, U"Interpolation", 2, 0)
 		RADIOBUTTON (U"Nearest")
 		RADIOBUTTON (U"Linear")
 	OK
 DO
 	NUMBER_ONE (Pitch)
-		double result = Sampled_getValueAtX (me, time, Pitch_LEVEL_FREQUENCY, unit, interpolation);
-		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, unit);
-	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, unit, 0))
+		double result = Sampled_getValueAtX (me, time, Pitch_LEVEL_FREQUENCY, (int) unit, interpolation);
+		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, (int) unit);
+	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, (int) unit, 0))
 }
 	
 FORM (REAL_Pitch_getValueInFrame, U"Pitch: Get value in frame", U"Pitch: Get value in frame...") {
-	INTEGERVAR (frameNumber, U"Frame number", U"10")
-	OPTIONMENU_ENUMVAR (unit, U"Unit", kPitch_unit, DEFAULT)
+	INTEGER (frameNumber, U"Frame number", U"10")
+	OPTIONMENU_ENUM (unit, U"Unit", kPitch_unit, DEFAULT)
 	OK
 DO
 	NUMBER_ONE (Pitch)
-		double result = Sampled_getValueAtSample (me, frameNumber, Pitch_LEVEL_FREQUENCY, unit);
-		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, unit);
-	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, unit, 0));
+		double result = Sampled_getValueAtSample (me, frameNumber, Pitch_LEVEL_FREQUENCY, (int) unit);
+		result = Function_convertToNonlogarithmic (me, result, Pitch_LEVEL_FREQUENCY, (int) unit);
+	NUMBER_ONE_END (U" ", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, (int) unit, 0));
 }
 
 DIRECT (HELP_Pitch_help) {
@@ -1752,7 +1752,7 @@ DIRECT (PLAY_Pitch_play) {
 }
 
 FORM (NEW_Pitch_smooth, U"Pitch: Smooth", U"Pitch: Smooth...") {
-	REALVAR (bandwidth, U"Bandwidth (Hz)", U"10.0")
+	REAL (bandwidth, U"Bandwidth (Hz)", U"10.0")
 	OK
 DO
 	CONVERT_EACH (Pitch)
@@ -1762,9 +1762,9 @@ DO
 
 FORM (GRAPHICS_Pitch_speckle, U"Pitch: Speckle", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
-	POSITIVEVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
+	POSITIVE (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	if (toFrequency <= fromFrequency) Melder_throw (U"Maximum frequency should be greater than minimum frequency.");
@@ -1775,9 +1775,9 @@ DO
 
 FORM (GRAPHICS_Pitch_speckleErb, U"Pitch: Speckle erb", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (ERB)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (ERB)", U"10.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (ERB)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (ERB)", U"10.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Pitch)
@@ -1787,9 +1787,9 @@ DO
 
 FORM (GRAPHICS_Pitch_speckleLogarithmic, U"Pitch: Speckle logarithmic", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	POSITIVEVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
-	POSITIVEVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	POSITIVE (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
+	POSITIVE (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	if (toFrequency <= fromFrequency) Melder_throw (U"Maximum frequency must be greater than minimum frequency.");
@@ -1800,9 +1800,9 @@ DO
 
 FORM (GRAPHICS_Pitch_speckleMel, U"Pitch: Speckle mel", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (mel)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (mel)", U"500.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (mel)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (mel)", U"500.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Pitch)
@@ -1813,9 +1813,9 @@ DO
 FORM (GRAPHICS_Pitch_speckleSemitones100, U"Pitch: Speckle semitones (re 100 Hz)", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
 	LABEL (U"", U"Range in semitones re 100 hertz:")
-	REALVAR (fromFrequency, U"left Frequency range (st)", U"-12.0")
-	REALVAR (toFrequency, U"right Frequency range (st)", U"30.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (st)", U"-12.0")
+	REAL (toFrequency, U"right Frequency range (st)", U"30.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Pitch)
@@ -1826,9 +1826,9 @@ DO
 FORM (GRAPHICS_Pitch_speckleSemitones200, U"Pitch: Speckle semitones (re 200 Hz)", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
 	LABEL (U"", U"Range in semitones re 200 hertz:")
-	REALVAR (fromFrequency, U"left Frequency range (st)", U"-24.0")
-	REALVAR (toFrequency, U"right Frequency range (st)", U"18.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (st)", U"-24.0")
+	REAL (toFrequency, U"right Frequency range (st)", U"18.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Pitch)
@@ -1839,9 +1839,9 @@ DO
 FORM (GRAPHICS_Pitch_speckleSemitones440, U"Pitch: Speckle semitones (re 440 Hz)", U"Pitch: Draw...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
 	LABEL (U"", U"Range in semitones re 440 hertz:")
-	REALVAR (fromFrequency, U"left Frequency range (st)", U"-36.0")
-	REALVAR (toFrequency, U"right Frequency range (st)", U"6.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (st)", U"-36.0")
+	REAL (toFrequency, U"right Frequency range (st)", U"6.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Pitch)
@@ -1850,16 +1850,22 @@ DO
 }
 
 FORM (NEW_Pitch_subtractLinearFit, U"Pitch: subtract linear fit", nullptr) {
-	RADIOVARx (unit, U"Unit", 1, 0)
-		RADIOBUTTON (U"Hertz")
-		RADIOBUTTON (U"Hertz (logarithmic)")
-		RADIOBUTTON (U"Mel")
-		RADIOBUTTON (U"Semitones")
-		RADIOBUTTON (U"ERB")
+	OPTIONMENU (unit_i, U"Unit", 1)
+		OPTION (U"Hertz")
+		OPTION (U"mel")
+		OPTION (U"logHertz")
+		OPTION (U"semitones")
+		OPTION (U"ERB")
 	OK
 DO
+	kPitch_unit unit =
+		unit_i == 1 ? kPitch_unit::HERTZ :
+		unit_i == 2 ? kPitch_unit::MEL :
+		unit_i == 3 ? kPitch_unit::LOG_HERTZ :
+		unit_i == 4 ? kPitch_unit::SEMITONES_1 :
+		kPitch_unit::ERB;
 	CONVERT_EACH (Pitch)
-		autoPitch result = Pitch_subtractLinearFit (me, (kPitch_unit) unit);
+		autoPitch result = Pitch_subtractLinearFit (me, unit);
 	CONVERT_EACH_END (my name)
 }
 
@@ -1900,8 +1906,8 @@ DIRECT (NEW_Pitch_to_Sound_hum) {
 }
 
 FORM (NEW_Pitch_to_Sound_sine, U"Pitch: To Sound (sine)", nullptr) {
-	POSITIVE4 (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
-	RADIO4x (cutVoicelessStretches, U"Cut voiceless stretches", 2, 0)
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	RADIOx (cutVoicelessStretches, U"Cut voiceless stretches", 2, 0)
 		OPTION (U"exactly")
 		OPTION (U"at nearest zero crossings")
 	OK
@@ -1912,8 +1918,8 @@ DO
 }
 
 FORM (NEW_Pitch_to_TextGrid, U"To TextGrid...", U"Pitch: To TextGrid...") {
-	SENTENCEVAR (tierNames, U"Tier names", U"Mary John bell")
-	SENTENCEVAR (pointTiers, U"Point tiers", U"bell")
+	SENTENCE (tierNames, U"Tier names", U"Mary John bell")
+	SENTENCE (pointTiers, U"Point tiers", U"bell")
 	OK
 DO
 	CONVERT_EACH (Pitch)
@@ -1931,13 +1937,13 @@ DIRECT (NEW_Pitch_to_TextTier) {
 
 FORM (GRAPHICS_old_PitchTier_Pitch_draw, U"PitchTier & Pitch: Draw", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"From frequency (Hz)", U"0.0")
-	REALVAR (toFrequency, U"To frequency (Hz)", U"500.0")
-	RADIOVARx (lineTypeForNonperiodicIntervals, U"Line type for non-periodic intervals", 2, 0)
+	REAL (fromFrequency, U"From frequency (Hz)", U"0.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"500.0")
+	RADIOx (lineTypeForNonperiodicIntervals, U"Line type for non-periodic intervals", 2, 0)
 		RADIOBUTTON (U"Normal")
 		RADIOBUTTON (U"Dotted")
 		RADIOBUTTON (U"Blank")
-	BOOLEANVAR (garnish, U"Garnish", 1)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (PitchTier, Pitch)
@@ -1948,15 +1954,15 @@ DO
 
 FORM (GRAPHICS_PitchTier_Pitch_draw, U"PitchTier & Pitch: Draw", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"From frequency (Hz)", U"0.0")
-	REALVAR (toFrequency, U"To frequency (Hz)", U"500.0")
-	RADIOVARx (lineTypeForNonperiodicIntervals, U"Line type for non-periodic intervals", 2, 0)
+	REAL (fromFrequency, U"From frequency (Hz)", U"0.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"500.0")
+	RADIOx (lineTypeForNonperiodicIntervals, U"Line type for non-periodic intervals", 2, 0)
 		RADIOBUTTON (U"Normal")
 		RADIOBUTTON (U"Dotted")
 		RADIOBUTTON (U"Blank")
-	BOOLEANVAR (garnish, U"Garnish", 1)
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"")
-	OPTIONMENUSTRVAR (drawingMethod, U"Drawing method", 1)
+	OPTIONMENUSTR (drawingMethod, U"Drawing method", 1)
 		OPTION (U"lines")
 		OPTION (U"speckles")
 		OPTION (U"lines and speckles")
@@ -1997,8 +2003,8 @@ DIRECT (NEW1_Sound_Pitch_to_PointProcess_cc) {
 }
 
 FORM (NEW1_Sound_Pitch_to_PointProcess_peaks, U"Sound & Pitch: To PointProcess (peaks)", 0) {
-	BOOLEANVAR (includeMaxima, U"Include maxima", 1)
-	BOOLEANVAR (includeMinima, U"Include minima", 0)
+	BOOLEAN (includeMaxima, U"Include maxima", true)
+	BOOLEAN (includeMinima, U"Include minima", false)
 	OK
 DO
 	CONVERT_TWO (Sound, Pitch)
@@ -2009,10 +2015,10 @@ DO
 // MARK: - POLYGON
 
 FORM (GRAPHICS_Polygon_draw, U"Polygon: Draw", nullptr) {
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0 (= all)")
-	REALVAR (ymin, U"Ymin", U"0.0")
-	REALVAR (ymax, U"Ymax", U"0.0 (= all)")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0 (= all)")
+	REAL (ymin, U"Ymin", U"0.0")
+	REAL (ymax, U"Ymax", U"0.0 (= all)")
 	OK
 DO
 	GRAPHICS_EACH (Polygon)
@@ -2021,11 +2027,11 @@ DO
 }
 
 FORM (GRAPHICS_Polygon_drawCircles, U"Polygon: Draw circles", nullptr) {
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0 (= all)")
-	REALVAR (ymin, U"Ymin", U"0.0")
-	REALVAR (ymax, U"Ymax", U"0.0 (= all)")
-	POSITIVEVAR (diameter, U"Diameter (mm)", U"3.0")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0 (= all)")
+	REAL (ymin, U"Ymin", U"0.0")
+	REAL (ymax, U"Ymax", U"0.0 (= all)")
+	POSITIVE (diameter, U"Diameter (mm)", U"3.0")
 	OK
 DO
 	GRAPHICS_EACH (Polygon)
@@ -2034,10 +2040,10 @@ DO
 }
 
 FORM (GRAPHICS_Polygon_drawClosed, U"Polygon: Draw", nullptr) {
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0 (= all)")
-	REALVAR (ymin, U"Ymin", U"0.0")
-	REALVAR (ymax, U"Ymax", U"0.0 (= all)")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0 (= all)")
+	REAL (ymin, U"Ymin", U"0.0")
+	REAL (ymax, U"Ymax", U"0.0 (= all)")
 	OK
 DO
 	GRAPHICS_EACH (Polygon)
@@ -2046,12 +2052,12 @@ DO
 }
 
 FORM (GRAPHICS_Polygons_drawConnection, U"Polygons: Draw connection", nullptr) {
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0 (= all)")
-	REALVAR (ymin, U"Ymin", U"0.0")
-	REALVAR (ymax, U"Ymax", U"0.0 (= all)")
-	BOOLEANVAR (arrow, U"Arrow", false)
-	POSITIVEVAR (relativeLength, U"Relative length", U"0.9")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0 (= all)")
+	REAL (ymin, U"Ymin", U"0.0")
+	REAL (ymax, U"Ymax", U"0.0 (= all)")
+	BOOLEAN (arrow, U"Arrow", false)
+	POSITIVE (relativeLength, U"Relative length", U"0.9")
 	OK
 DO
 	GRAPHICS_COUPLE (Polygon)
@@ -2065,10 +2071,10 @@ DIRECT (HELP_Polygon_help) {
 
 FORM (GRAPHICS_Polygon_paint, U"Polygon: Paint", nullptr) {
 	COLOUR (U"Colour (0-1, name, or {r,g,b})", U"0.5")
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0 (= all)")
-	REALVAR (ymin, U"Ymin", U"0.0")
-	REALVAR (ymax, U"Ymax", U"0.0 (= all)")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0 (= all)")
+	REAL (ymin, U"Ymin", U"0.0")
+	REAL (ymax, U"Ymax", U"0.0 (= all)")
 	OK
 DO
 	GRAPHICS_EACH (Polygon)
@@ -2077,11 +2083,11 @@ DO
 }
 
 FORM (GRAPHICS_Polygon_paintCircles, U"Polygon: Paint circles", nullptr) {
-	REALVAR (xmin, U"Xmin", U"0.0")
-	REALVAR (xmax, U"Xmax", U"0.0 (= all)")
-	REALVAR (ymin, U"Ymin", U"0.0")
-	REALVAR (ymax, U"Ymax", U"0.0 (= all)")
-	POSITIVEVAR (diameter, U"Diameter (mm)", U"3.0")
+	REAL (xmin, U"Xmin", U"0.0")
+	REAL (xmax, U"Xmax", U"0.0 (= all)")
+	REAL (ymin, U"Ymin", U"0.0")
+	REAL (ymax, U"Ymax", U"0.0 (= all)")
+	POSITIVE (diameter, U"Diameter (mm)", U"3.0")
 	OK
 DO
 	GRAPHICS_EACH (Polygon)
@@ -2096,7 +2102,7 @@ DIRECT (MODIFY_Polygon_randomize) {
 }
 
 FORM (MODIFY_Polygon_salesperson, U"Polygon: Find shortest path", nullptr) {
-	NATURALVAR (numberOfIterations, U"Number of iterations", U"1")
+	NATURAL (numberOfIterations, U"Number of iterations", U"1")
 	OK
 DO
 	MODIFY_EACH (Polygon)
@@ -2114,12 +2120,12 @@ DIRECT (NEW_Polygon_to_Matrix) {
 
 FORM (INFO_Sound_Pitch_PointProcess_voiceReport, U"Voice report", U"Voice") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	POSITIVE4 (fromPitch, U"left Pitch range (Hz)", U"75.0")
-	POSITIVE4 (toPitch, U"right Pitch range (Hz)", U"600.0")
-	POSITIVE4 (maximumPeriodFactor, U"Maximum period factor", U"1.3")
-	POSITIVE4 (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
-	REAL4 (silenceThreshold, U"Silence threshold", U"0.03")
-	REAL4 (voicingThreshold, U"Voicing threshold", U"0.45")
+	POSITIVE (fromPitch, U"left Pitch range (Hz)", U"75.0")
+	POSITIVE (toPitch, U"right Pitch range (Hz)", U"600.0")
+	POSITIVE (maximumPeriodFactor, U"Maximum period factor", U"1.3")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	REAL (silenceThreshold, U"Silence threshold", U"0.03")
+	REAL (voicingThreshold, U"Voicing threshold", U"0.45")
 	OK
 DO
 	INFO_THREE (Sound, Pitch, PointProcess)
@@ -2133,7 +2139,7 @@ DO
 // MARK: - SOUND & POINTPROCESS & PITCHTIER & DURATIONTIER
 
 FORM (NEW1_Sound_Point_Pitch_Duration_to_Sound, U"To Sound", nullptr) {
-	POSITIVE4 (longestPeriod, U"Longest period (s)", U"0.02")
+	POSITIVE (longestPeriod, U"Longest period (s)", U"0.02")
 	OK
 DO
 	CONVERT_FOUR (Sound, PointProcess, PitchTier, DurationTier)
@@ -2145,14 +2151,14 @@ DO
 
 FORM (GRAPHICS_Spectrogram_paint, U"Spectrogram: Paint", U"Spectrogram: Paint...") {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (Hz)", U"0.0 (= all)")
-	REAL4 (maximum, U"Maximum (dB/Hz)", U"100.0")
-	BOOLEAN4 (autoscaling, U"Autoscaling", 1)
-	POSITIVE4 (dynamicRange, U"Dynamic range (dB)", U"50.0")
-	REAL4 (preEmphasis, U"Pre-emphasis (dB/oct)", U"6.0")
-	REAL4 (dynamicCompression, U"Dynamic compression (0-1)", U"0.0")
-	BOOLEAN4 (garnish, U"Garnish", 1)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"0.0 (= all)")
+	REAL (maximum, U"Maximum (dB/Hz)", U"100.0")
+	BOOLEAN (autoscaling, U"Autoscaling", 1)
+	POSITIVE (dynamicRange, U"Dynamic range (dB)", U"50.0")
+	REAL (preEmphasis, U"Pre-emphasis (dB/oct)", U"6.0")
+	REAL (dynamicCompression, U"Dynamic compression (0-1)", U"0.0")
+	BOOLEAN (garnish, U"Garnish", 1)
 	OK
 DO
 	GRAPHICS_EACH (Spectrogram)
@@ -2167,7 +2173,7 @@ FORM (MODIFY_Spectrogram_formula, U"Spectrogram: Formula", U"Spectrogram: Formul
 	LABEL (U"label", U"   `y' is the frequency in hertz")
 	LABEL (U"label", U"   `self' is the current value in Pa\u00B2/Hz")
 	LABEL (U"label", U"   Replace all values with:")
-	TEXTFIELD4 (formula, U"formula", U"self * exp (- x / 0.1)")
+	TEXTFIELD (formula, U"formula", U"self * exp (- x / 0.1)")
 	OK
 DO
 	MODIFY_EACH_WEAK (Spectrogram)
@@ -2176,8 +2182,8 @@ DO
 }
 
 FORM (REAL_Spectrogram_getPowerAt, U"Spectrogram: Get power at (time, frequency)", nullptr) {
-	REAL4 (time, U"Time (s)", U"0.5")
-	REAL4 (frequency, U"Frequency (Hz)", U"1000")
+	REAL (time, U"Time (s)", U"0.5")
+	REAL (frequency, U"Frequency (Hz)", U"1000")
 	OK
 DO
 	NUMBER_ONE (Spectrogram)
@@ -2202,7 +2208,7 @@ DIRECT (NEW_Spectrogram_to_Matrix) {
 }
 
 FORM (NEW_Spectrogram_to_Sound, U"Spectrogram: To Sound", nullptr) {
-	REAL4 (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	REAL (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
 	OK
 DO
 	CONVERT_EACH (Spectrogram)
@@ -2211,7 +2217,7 @@ DO
 }
 
 FORM (NEW_Spectrogram_to_Spectrum, U"Spectrogram: To Spectrum (slice)", nullptr) {
-	REALVAR (time, U"Time (seconds)", U"0.0")
+	REAL (time, U"Time (seconds)", U"0.0")
 	OK
 DO
 	CONVERT_EACH (Spectrogram)
@@ -2250,11 +2256,11 @@ DIRECT (WINDOW_Spectrum_viewAndEdit) {
 // MARK: Draw
 
 FORM (GRAPHICS_Spectrum_draw, U"Spectrum: Draw", nullptr) {
-	REAL4 (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REAL4 (toFrequency, U"right Frequency range (Hz)", U"0.0 (= all)")
-	REAL4 (minimumPower, U"Minimum power (dB/Hz)", U"0 (= auto)")
-	REAL4 (maximumPower, U"Maximum power (dB/Hz)", U"0 (= auto)")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"0.0 (= all)")
+	REAL (minimumPower, U"Minimum power (dB/Hz)", U"0 (= auto)")
+	REAL (maximumPower, U"Maximum power (dB/Hz)", U"0 (= auto)")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Spectrum)
@@ -2263,11 +2269,11 @@ DO
 }
 
 FORM (GRAPHICS_Spectrum_drawLogFreq, U"Spectrum: Draw (log freq)", nullptr) {
-	POSITIVE4 (fromFrequency, U"left Frequency range (Hz)", U"10.0")
-	POSITIVE4 (toFrequency, U"right Frequency range (Hz)", U"10000.0")
-	REAL4 (minimumPower, U"Minimum power (dB/Hz)", U"0 (= auto)")
-	REAL4 (maximumPower, U"Maximum power (dB/Hz)", U"0 (= auto)")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	POSITIVE (fromFrequency, U"left Frequency range (Hz)", U"10.0")
+	POSITIVE (toFrequency, U"right Frequency range (Hz)", U"10000.0")
+	REAL (minimumPower, U"Minimum power (dB/Hz)", U"0 (= auto)")
+	REAL (maximumPower, U"Maximum power (dB/Hz)", U"0 (= auto)")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Spectrum)
@@ -2278,12 +2284,12 @@ DO
 // MARK: Tabulate
 
 FORM (LIST_Spectrum_list, U"Spectrum: List", 0) {
-	BOOLEAN4 (includeBinNumber, U"Include bin number", false)
-	BOOLEAN4 (includeFrequency, U"Include frequency", true)
-	BOOLEAN4 (includeRealPart, U"Include real part", false)
-	BOOLEAN4 (includeImaginaryPart, U"Include imaginary part", false)
-	BOOLEAN4 (includeEnergyDensity, U"Include energy density", false)
-	BOOLEAN4 (includePowerDensity, U"Include power density", true)
+	BOOLEAN (includeBinNumber, U"Include bin number", false)
+	BOOLEAN (includeFrequency, U"Include frequency", true)
+	BOOLEAN (includeRealPart, U"Include real part", false)
+	BOOLEAN (includeImaginaryPart, U"Include imaginary part", false)
+	BOOLEAN (includeEnergyDensity, U"Include energy density", false)
+	BOOLEAN (includePowerDensity, U"Include power density", true)
 	OK
 DO
 	INFO_ONE (Spectrum)
@@ -2295,8 +2301,8 @@ DO
 // MARK: Query
 
 FORM (REAL_Spectrum_getBandDensity, U"Spectrum: Get band density", nullptr) {
-	REAL4 (bandFloor, U"Band floor (Hz)", U"200.0")
-	REAL4 (bandCeiling, U"Band ceiling (Hz)", U"1000.0")
+	REAL (bandFloor, U"Band floor (Hz)", U"200.0")
+	REAL (bandCeiling, U"Band ceiling (Hz)", U"1000.0")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2305,10 +2311,10 @@ DO
 }
 
 FORM (REAL_Spectrum_getBandDensityDifference, U"Spectrum: Get band density difference", nullptr) {
-	REAL4 (lowBandFloor, U"Low band floor (Hz)", U"0.0")
-	REAL4 (lowBandCeiling, U"Low band ceiling (Hz)", U"500.0")
-	REAL4 (highBandFloor, U"High band floor (Hz)", U"500.0")
-	REAL4 (highBandCeiling, U"High band ceiling (Hz)", U"4000.0")
+	REAL (lowBandFloor, U"Low band floor (Hz)", U"0.0")
+	REAL (lowBandCeiling, U"Low band ceiling (Hz)", U"500.0")
+	REAL (highBandFloor, U"High band floor (Hz)", U"500.0")
+	REAL (highBandCeiling, U"High band ceiling (Hz)", U"4000.0")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2318,8 +2324,8 @@ DO
 }
 
 FORM (REAL_Spectrum_getBandEnergy, U"Spectrum: Get band energy", nullptr) {
-	REAL4 (bandFloor, U"Band floor (Hz)", U"200.0")
-	REAL4 (bandCeiling, U"Band ceiling (Hz)", U"1000.0")
+	REAL (bandFloor, U"Band floor (Hz)", U"200.0")
+	REAL (bandCeiling, U"Band ceiling (Hz)", U"1000.0")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2328,10 +2334,10 @@ DO
 }
 
 FORM (REAL_Spectrum_getBandEnergyDifference, U"Spectrum: Get band energy difference", nullptr) {
-	REAL4 (lowBandFloor, U"Low band floor (Hz)", U"0.0")
-	REAL4 (lowBandCeiling, U"Low band ceiling (Hz)", U"500.0")
-	REAL4 (highBandFloor, U"High band floor (Hz)", U"500.0")
-	REAL4 (highBandCeiling, U"High band ceiling (Hz)", U"4000.0")
+	REAL (lowBandFloor, U"Low band floor (Hz)", U"0.0")
+	REAL (lowBandCeiling, U"Low band ceiling (Hz)", U"500.0")
+	REAL (highBandFloor, U"High band floor (Hz)", U"500.0")
+	REAL (highBandCeiling, U"High band ceiling (Hz)", U"4000.0")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2341,7 +2347,7 @@ DO
 }
 
 FORM (REAL_Spectrum_getBinNumberFromFrequency, U"Spectrum: Get bin number from frequency", nullptr) {
-	REAL4 (frequency, U"Frequency (Hz)", U"2000.0")
+	REAL (frequency, U"Frequency (Hz)", U"2000.0")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2356,8 +2362,8 @@ DIRECT (REAL_Spectrum_getBinWidth) {
 }
 
 FORM (REAL_Spectrum_getCentralMoment, U"Spectrum: Get central moment", U"Spectrum: Get central moment...") {
-	POSITIVE4 (moment, U"Moment", U"3.0")
-	POSITIVE4 (power, U"Power", U"2.0")
+	POSITIVE (moment, U"Moment", U"3.0")
+	POSITIVE (power, U"Power", U"2.0")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2366,7 +2372,7 @@ DO
 }
 
 FORM (REAL_Spectrum_getCentreOfGravity, U"Spectrum: Get centre of gravity", U"Spectrum: Get centre of gravity...") {
-	POSITIVE4 (power, U"Power", U"2.0")
+	POSITIVE (power, U"Power", U"2.0")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2375,7 +2381,7 @@ DO
 }
 
 FORM (REAL_Spectrum_getFrequencyFromBin, U"Spectrum: Get frequency from bin", nullptr) {
-	NATURAL4 (bandNumber, U"Band number", U"1")
+	NATURAL (bandNumber, U"Band number", U"1")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2396,7 +2402,7 @@ DIRECT (REAL_Spectrum_getHighestFrequency) {
 }
 
 FORM (REAL_Spectrum_getRealValueInBin, U"Spectrum: Get real value in bin", nullptr) {
-	NATURAL4 (binNumber, U"Bin number", U"100")
+	NATURAL (binNumber, U"Bin number", U"100")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2406,7 +2412,7 @@ DO
 }
 
 FORM (REAL_Spectrum_getImaginaryValueInBin, U"Spectrum: Get imaginary value in bin", nullptr) {
-	NATURAL4 (binNumber, U"Bin number", U"100")
+	NATURAL (binNumber, U"Bin number", U"100")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2416,7 +2422,7 @@ DO
 }
 
 FORM (REAL_Spectrum_getKurtosis, U"Spectrum: Get kurtosis", U"Spectrum: Get kurtosis...") {
-	POSITIVE4 (power, U"Power", U"2.0")
+	POSITIVE (power, U"Power", U"2.0")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2431,7 +2437,7 @@ DIRECT (INTEGER_Spectrum_getNumberOfBins) {
 }
 
 FORM (REAL_Spectrum_getSkewness, U"Spectrum: Get skewness", U"Spectrum: Get skewness...") {
-	POSITIVEVAR (power, U"Power", U"2.0")
+	POSITIVE (power, U"Power", U"2.0")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2440,7 +2446,7 @@ DO
 }
 
 FORM (REAL_Spectrum_getStandardDeviation, U"Spectrum: Get standard deviation", U"Spectrum: Get standard deviation...") {
-	POSITIVEVAR (power, U"Power", U"2.0")
+	POSITIVE (power, U"Power", U"2.0")
 	OK
 DO
 	NUMBER_ONE (Spectrum)
@@ -2457,7 +2463,7 @@ FORM (MODIFY_Spectrum_formula, U"Spectrum: Formula", U"Spectrum: Formula...") {
 		"x := 0;   for col := 1 to ncol do { self [1, col] := `formula' ; x := x + dx }")
 	LABEL (U"label", U"y := 2;   row := 2;   "
 		"x := 0;   for col := 1 to ncol do { self [2, col] := `formula' ; x := x + dx }")
-	TEXTFIELD4 (formula, U"formula", U"0")
+	TEXTFIELD (formula, U"formula", U"0")
 	OK
 DO
 	MODIFY_EACH_WEAK (Spectrum)
@@ -2466,9 +2472,9 @@ DO
 }
 
 FORM (MODIFY_Spectrum_passHannBand, U"Spectrum: Filter (pass Hann band)", U"Spectrum: Filter (pass Hann band)...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"500.0")
-	REAL4 (toFrequency, U"To frequency (Hz)", U"1000.0")
-	POSITIVE4 (smoothing, U"Smoothing (Hz)", U"100.0")
+	REAL (fromFrequency, U"From frequency (Hz)", U"500.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"1000.0")
+	POSITIVE (smoothing, U"Smoothing (Hz)", U"100.0")
 	OK
 DO
 	MODIFY_EACH (Spectrum)
@@ -2477,9 +2483,9 @@ DO
 }
 
 FORM (MODIFY_Spectrum_stopHannBand, U"Spectrum: Filter (stop Hann band)", U"Spectrum: Filter (stop Hann band)...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"500.0")
-	REAL4 (toFrequency, U"To frequency (Hz)", U"1000.0")
-	POSITIVE4 (smoothing, U"Smoothing (Hz)", U"100.0")
+	REAL (fromFrequency, U"From frequency (Hz)", U"500.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"1000.0")
+	POSITIVE (smoothing, U"Smoothing (Hz)", U"100.0")
 	OK
 DO
 	MODIFY_EACH (Spectrum)
@@ -2490,7 +2496,7 @@ DO
 // MARK: Convert
 
 FORM (NEW_Spectrum_cepstralSmoothing, U"Spectrum: Cepstral smoothing", nullptr) {
-	POSITIVE4 (bandwidth, U"Bandwidth (Hz)", U"500.0")
+	POSITIVE (bandwidth, U"Bandwidth (Hz)", U"500.0")
 	OK
 DO
 	CONVERT_EACH (Spectrum)
@@ -2499,8 +2505,8 @@ DO
 }
 
 FORM (NEW_Spectrum_lpcSmoothing, U"Spectrum: LPC smoothing", 0) {
-	NATURAL4 (numberOfPeaks, U"Number of peaks", U"5")
-	POSITIVE4 (preEmphasisFrom, U"Pre-emphasis from (Hz)", U"50.0")
+	NATURAL (numberOfPeaks, U"Number of peaks", U"5")
+	POSITIVE (preEmphasisFrom, U"Pre-emphasis from (Hz)", U"50.0")
 	OK
 DO
 	CONVERT_EACH (Spectrum)
@@ -2509,7 +2515,7 @@ DO
 }
 
 FORM (NEW_Spectrum_to_Excitation, U"Spectrum: To Excitation", nullptr) {
-	POSITIVE4 (frequencyResolution, U"Frequency resolution (Bark)", U"0.1")
+	POSITIVE (frequencyResolution, U"Frequency resolution (Bark)", U"0.1")
 	OK
 DO
 	CONVERT_EACH (Spectrum)
@@ -2519,7 +2525,7 @@ DO
 
 FORM (NEW_Spectrum_to_Formant_peaks, U"Spectrum: To Formant (peaks)", nullptr) {
 	LABEL (U"", U"Warning: this simply picks peaks from 0 Hz up!")
-	NATURAL4 (maximumNumberOfFormants, U"Maximum number of formants", U"1000")
+	NATURAL (maximumNumberOfFormants, U"Maximum number of formants", U"1000")
 	OK
 DO
 	CONVERT_EACH (Spectrum)
@@ -2528,7 +2534,7 @@ DO
 }
 
 FORM (NEW_Spectrum_to_Ltas, U"Spectrum: To Long-term average spectrum", nullptr) {
-	POSITIVE4 (bandwidth, U"Bandwidth (Hz)", U"1000.0")
+	POSITIVE (bandwidth, U"Bandwidth (Hz)", U"1000.0")
 	OK
 DO
 	CONVERT_EACH (Spectrum)
@@ -2571,7 +2577,7 @@ DIRECT (NEW_Spectrum_to_SpectrumTier_peaks) {
 // MARK: New
 
 FORM (NEW1_Strings_createAsFileList, U"Create Strings as file list", U"Create Strings as file list...") {
-	SENTENCEVAR (name, U"Name", U"fileList")
+	SENTENCE (name, U"Name", U"fileList")
 	LABEL (U"", U"File path:")
 	static structMelderDir defaultDir { };
 	Melder_getHomeDir (& defaultDir);
@@ -2587,7 +2593,7 @@ FORM (NEW1_Strings_createAsFileList, U"Create Strings as file list", U"Create St
 	#else
 		Melder_sprint (defaultPath,kMelder_MAXPATH+1, homeDirectory, U"/*.wav");
 	#endif
-	TEXTVAR (path, U"path", defaultPath)
+	TEXTFIELD (path, U"path", defaultPath)
 	OK
 DO
 	CREATE_ONE
@@ -2596,7 +2602,7 @@ DO
 }
 
 FORM (NEW1_Strings_createAsDirectoryList, U"Create Strings as directory list", U"Create Strings as directory list...") {
-	SENTENCEVAR (name, U"Name", U"directoryList")
+	SENTENCE (name, U"Name", U"directoryList")
 	LABEL (U"", U"Path:")
 	static structMelderDir defaultDir { };
 	Melder_getHomeDir (& defaultDir);
@@ -2612,7 +2618,7 @@ FORM (NEW1_Strings_createAsDirectoryList, U"Create Strings as directory list", U
 	#else
 		Melder_sprint (defaultPath,kMelder_MAXPATH+1, homeDirectory, U"/*");
 	#endif
-	TEXTVAR (path, U"path", defaultPath)
+	TEXTFIELD (path, U"path", defaultPath)
 	OK
 DO
 	CREATE_ONE
@@ -2668,7 +2674,7 @@ DIRECT (INTEGER_Strings_getNumberOfStrings) {
 }
 
 FORM (STRING_Strings_getString, U"Get string", nullptr) {
-	NATURAL4 (position, U"Position", U"1")
+	NATURAL (position, U"Position", U"1")
 	OK
 DO
 	STRING_ONE (Strings)
@@ -2679,9 +2685,9 @@ DO
 // MARK: Modify
 
 FORM (MODIFY_Strings_insertString, U"Strings: Insert string", nullptr) {
-	INTEGERVAR (atPosition, U"At position", U"0 (= at end)")
+	INTEGER (atPosition, U"At position", U"0 (= at end)")
 	LABEL (U"", U"String:")
-	TEXTVAR (string, U"string", U"")
+	TEXTFIELD (string, U"string", U"")
 	OK
 DO
 	MODIFY_EACH (Strings)
@@ -2708,7 +2714,7 @@ DIRECT (MODIFY_Strings_randomize) {
 }
 
 FORM (MODIFY_Strings_removeString, U"Strings: Remove string", nullptr) {
-	NATURAL4 (position, U"Position", U"1")
+	NATURAL (position, U"Position", U"1")
 	OK
 DO
 	MODIFY_EACH (Strings)
@@ -2717,9 +2723,9 @@ DO
 }
 
 FORM (MODIFY_Strings_setString, U"Strings: Set string", nullptr) {
-	NATURAL4 (position, U"Position", U"1")
+	NATURAL (position, U"Position", U"1")
 	LABEL (U"", U"New string:")
-	TEXTFIELD4 (newString, U"newString", U"")
+	TEXTFIELD (newString, U"newString", U"")
 	OK
 DO
 	MODIFY_EACH (Strings)
@@ -2736,10 +2742,10 @@ DIRECT (MODIFY_Strings_sort) {
 // MARK: Convert
 
 FORM (NEW_Strings_replaceAll, U"Strings: Replace all", nullptr) {
-	SENTENCE4 (find, U"Find", U"a")
-	SENTENCE4 (replaceWith, U"Replace with", U"b")
-	INTEGER4 (replaceLimitPerString, U"Replace limit per string", U"0 (= unlimited)")
-	RADIO4x (findAndReplaceStringsAre, U"Find and replace strings are", 1, 0)
+	SENTENCE (find, U"Find", U"a")
+	SENTENCE (replaceWith, U"Replace with", U"b")
+	INTEGER (replaceLimitPerString, U"Replace limit per string", U"0 (= unlimited)")
+	RADIOx (findAndReplaceStringsAre, U"Find and replace strings are", 1, 0)
 		RADIOBUTTON (U"literals")
 		RADIOBUTTON (U"regular expressions")
 	OK
@@ -2776,10 +2782,10 @@ DIRECT (NEW_Table_to_Matrix) {
 FORM (NEW1_TextGrid_create, U"Create TextGrid", U"Create TextGrid...") {
 	LABEL (U"", U"Hint: to label or segment an existing Sound,")
 	LABEL (U"", U"select that Sound and choose \"To TextGrid...\".")
-	REAL4 (startTime, U"Start time (s)", U"0.0")
-	REAL4 (endTime, U"End time (s)", U"1.0")
-	SENTENCE4 (allTierNames, U"All tier names", U"Mary John bell")
-	SENTENCE4 (whichOfTheseArePointTiers, U"Which of these are point tiers?", U"bell")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
+	SENTENCE (allTierNames, U"All tier names", U"Mary John bell")
+	SENTENCE (whichOfTheseArePointTiers, U"Which of these are point tiers?", U"bell")
 	OK
 DO
 	if (endTime <= startTime) Melder_throw (U"The end time should be greater than the start time");
@@ -2805,12 +2811,12 @@ DIRECT (NEW_Transition_conflate) {
 }
 
 FORM (GRAPHICS_Transition_drawAsNumbers, U"Draw as numbers", nullptr) {
-	RADIO4 (format, U"Format", 1)
+	RADIO (format, U"Format", 1)
 		RADIOBUTTON (U"decimal")
 		RADIOBUTTON (U"exponential")
 		RADIOBUTTON (U"free")
 		RADIOBUTTON (U"rational")
-	NATURAL4 (precision, U"Precision", U"2")
+	NATURAL (precision, U"Precision", U"2")
 	OK
 DO
 	GRAPHICS_EACH (Transition)
@@ -2833,7 +2839,7 @@ DIRECT (HELP_Transition_help) {
 }
 
 FORM (NEW_Transition_power, U"Transition: Power...", nullptr) {
-	NATURAL4 (power, U"Power", U"2")
+	NATURAL (power, U"Power", U"2")
 	OK
 DO
 	CONVERT_EACH (Transition)
@@ -2850,11 +2856,11 @@ DIRECT (NEW_Transition_to_Matrix) {
 // MARK: - Praat menu
 
 FORM (INFO_Praat_test, U"Praat test", 0) {
-	OPTIONMENU_ENUM4 (test, U"Test", kPraatTests, DEFAULT)
-	SENTENCE4 (arg1, U"arg1", U"1000000")
-	SENTENCE4 (arg2, U"arg2", U"")
-	SENTENCE4 (arg3, U"arg3", U"")
-	SENTENCE4 (arg4, U"arg4", U"")
+	OPTIONMENU_ENUM (test, U"Test", kPraatTests, DEFAULT)
+	SENTENCE (arg1, U"arg1", U"1000000")
+	SENTENCE (arg2, U"arg2", U"")
+	SENTENCE (arg3, U"arg3", U"")
+	SENTENCE (arg4, U"arg4", U"")
 	OK
 DO
 	INFO_NONE
@@ -2880,7 +2886,7 @@ DIRECT (HELP_SearchManual_Fon) { Melder_search (); END }
 
 // MARK: - file recognizers
 
-static autoDaata cgnSyntaxFileRecognizer (int nread, const char *header, MelderFile file) {
+static autoDaata cgnSyntaxFileRecognizer (integer nread, const char *header, MelderFile file) {
 	if (nread < 57) return autoDaata ();
 	if (! strnequ (& header [0], "<?xml version=\"1.0\"?>", 21) ||
 	    (! strnequ (& header [22], "<!DOCTYPE ttext SYSTEM \"ttext.dtd\">", 35) &&
@@ -2888,7 +2894,7 @@ static autoDaata cgnSyntaxFileRecognizer (int nread, const char *header, MelderF
 	return TextGrid_readFromCgnSyntaxFile (file);
 }
 
-static autoDaata chronologicalTextGridTextFileRecognizer (int nread, const char *header, MelderFile file) {
+static autoDaata chronologicalTextGridTextFileRecognizer (integer nread, const char *header, MelderFile file) {
 	if (nread < 100) return autoDaata ();
 	if (strnequ (& header [0], "\"Praat chronological TextGrid text file\"", 40))
 		return TextGrid_readFromChronologicalTextFile (file);
diff --git a/fon/praat_Matrix.cpp b/fon/praat_Matrix.cpp
index 3f35d9f..05d7509 100644
--- a/fon/praat_Matrix.cpp
+++ b/fon/praat_Matrix.cpp
@@ -57,19 +57,19 @@ int praat_Matrix_formula (UiForm dia, Interpreter interpreter) {
 // MARK: New
 
 FORM (NEW1_Matrix_create, U"Create Matrix", U"Create Matrix...") {
-	WORD4 (name, U"Name", U"xy")
-	REAL4 (xmin, U"xmin", U"1.0")
-	REAL4 (xmax, U"xmax", U"1.0")
-	NATURAL4 (numberOfColumns, U"Number of columns", U"1")
-	POSITIVE4 (dx, U"dx", U"1.0")
-	REAL4 (x1, U"x1", U"1.0")
-	REAL4 (ymin, U"ymin", U"1.0")
-	REAL4 (ymax, U"ymax", U"1.0")
-	NATURAL4 (numberOfRows, U"Number of rows", U"1")
-	POSITIVE4 (dy, U"dy", U"1.0")
-	REAL4 (y1, U"y1", U"1.0")
+	WORD (name, U"Name", U"xy")
+	REAL (xmin, U"xmin", U"1.0")
+	REAL (xmax, U"xmax", U"1.0")
+	NATURAL (numberOfColumns, U"Number of columns", U"1")
+	POSITIVE (dx, U"dx", U"1.0")
+	REAL (x1, U"x1", U"1.0")
+	REAL (ymin, U"ymin", U"1.0")
+	REAL (ymax, U"ymax", U"1.0")
+	NATURAL (numberOfRows, U"Number of rows", U"1")
+	POSITIVE (dy, U"dy", U"1.0")
+	REAL (y1, U"y1", U"1.0")
 	LABEL (U"", U"Formula:")
-	TEXTFIELD4 (formula, U"formula", U"x*y")
+	TEXTFIELD (formula, U"formula", U"x*y")
 	OK
 DO
 	if (xmax < xmin) Melder_throw (U"Your xmax (", Melder_single (xmax), U") should not be less than your xmin (", Melder_single (xmin), U").");
@@ -83,11 +83,11 @@ DO
 }
 
 FORM (NEW1_Matrix_createSimple, U"Create simple Matrix", U"Create simple Matrix...") {
-	WORD4 (name, U"Name", U"xy")
-	NATURAL4 (numberOfRows, U"Number of rows", U"10")
-	NATURAL4 (numberOfColumns, U"Number of columns", U"10")
+	WORD (name, U"Name", U"xy")
+	NATURAL (numberOfRows, U"Number of rows", U"10")
+	NATURAL (numberOfColumns, U"Number of columns", U"10")
 	LABEL (U"", U"Formula:")
-	TEXTFIELD4 (formula, U"formula", U"x*y")
+	TEXTFIELD (formula, U"formula", U"x*y")
 	OK
 DO
 	CREATE_ONE
@@ -164,12 +164,12 @@ DIRECT (MOVIE_Matrix_movie) {
 // MARK: Draw
 
 FORM (GRAPHICS_Matrix_drawRows, U"Draw rows", nullptr) {
-	REAL4 (fromX, U"From x =", U"0.0")
-	REAL4 (toX, U"To x =", U"0.0")
-	REAL4 (fromY, U"From y =", U"0.0")
-	REAL4 (toY, U"To y =", U"0.0")
-	REAL4 (minimum, U"Minimum", U"0.0")
-	REAL4 (maximum, U"Maximum", U"0.0")
+	REAL (fromX, U"From x =", U"0.0")
+	REAL (toX, U"To x =", U"0.0")
+	REAL (fromY, U"From y =", U"0.0")
+	REAL (toY, U"To y =", U"0.0")
+	REAL (minimum, U"Minimum", U"0.0")
+	REAL (maximum, U"Maximum", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -178,11 +178,11 @@ DO
 }
 
 FORM (GRAPHICS_Matrix_drawOneContour, U"Draw one altitude contour", nullptr) {
-	REAL4 (fromX, U"From x =", U"0.0")
-	REAL4 (toX, U"To x =", U"0.0")
-	REAL4 (fromY, U"From y =", U"0.0")
-	REAL4 (toY, U"To y =", U"0.0")
-	REAL4 (height, U"Height", U"0.5")
+	REAL (fromX, U"From x =", U"0.0")
+	REAL (toX, U"To x =", U"0.0")
+	REAL (fromY, U"From y =", U"0.0")
+	REAL (toY, U"To y =", U"0.0")
+	REAL (height, U"Height", U"0.5")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -191,12 +191,12 @@ DO
 }
 
 FORM (GRAPHICS_Matrix_drawContours, U"Draw altitude contours", nullptr) {
-	REAL4 (fromX, U"From x =", U"0.0")
-	REAL4 (toX, U"To x =", U"0.0")
-	REAL4 (fromY, U"From y =", U"0.0")
-	REAL4 (toY, U"To y =", U"0.0")
-	REAL4 (minimum, U"Minimum", U"0.0")
-	REAL4 (maximum, U"Maximum", U"0.0")
+	REAL (fromX, U"From x =", U"0.0")
+	REAL (toX, U"To x =", U"0.0")
+	REAL (fromY, U"From y =", U"0.0")
+	REAL (toY, U"To y =", U"0.0")
+	REAL (minimum, U"Minimum", U"0.0")
+	REAL (maximum, U"Maximum", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -205,12 +205,12 @@ DO
 }
 
 FORM (GRAPHICS_Matrix_paintImage, U"Matrix: Paint grey image", nullptr) {
-	REAL4 (fromX, U"From x =", U"0.0")
-	REAL4 (toX, U"To x =", U"0.0")
-	REAL4 (fromY, U"From y =", U"0.0")
-	REAL4 (toY, U"To y =", U"0.0")
-	REAL4 (minimum, U"Minimum", U"0.0")
-	REAL4 (maximum, U"Maximum", U"0.0")
+	REAL (fromX, U"From x =", U"0.0")
+	REAL (toX, U"To x =", U"0.0")
+	REAL (fromY, U"From y =", U"0.0")
+	REAL (toY, U"To y =", U"0.0")
+	REAL (minimum, U"Minimum", U"0.0")
+	REAL (maximum, U"Maximum", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -219,12 +219,12 @@ DO
 }
 
 FORM (GRAPHICS_Matrix_paintContours, U"Matrix: Paint altitude contours with greys", nullptr) {
-	REAL4 (fromX, U"From x =", U"0.0")
-	REAL4 (toX, U"To x =", U"0.0")
-	REAL4 (fromY, U"From y =", U"0.0")
-	REAL4 (toY, U"To y =", U"0.0")
-	REAL4 (minimum, U"Minimum", U"0.0")
-	REAL4 (maximum, U"Maximum", U"0.0")
+	REAL (fromX, U"From x =", U"0.0")
+	REAL (toX, U"To x =", U"0.0")
+	REAL (fromY, U"From y =", U"0.0")
+	REAL (toY, U"To y =", U"0.0")
+	REAL (minimum, U"Minimum", U"0.0")
+	REAL (maximum, U"Maximum", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -233,12 +233,12 @@ DO
 }
 
 FORM (GRAPHICS_Matrix_paintCells, U"Matrix: Paint cells with greys", U"Matrix: Paint cells...") {
-	REAL4 (fromX, U"From x =", U"0.0")
-	REAL4 (toX, U"To x =", U"0.0")
-	REAL4 (fromY, U"From y =", U"0.0")
-	REAL4 (toY, U"To y =", U"0.0")
-	REAL4 (minimum, U"Minimum", U"0.0")
-	REAL4 (maximum, U"Maximum", U"0.0")
+	REAL (fromX, U"From x =", U"0.0")
+	REAL (toX, U"To x =", U"0.0")
+	REAL (fromY, U"From y =", U"0.0")
+	REAL (toY, U"To y =", U"0.0")
+	REAL (minimum, U"Minimum", U"0.0")
+	REAL (maximum, U"Maximum", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -247,12 +247,12 @@ DO
 }
 
 FORM (GRAPHICS_Matrix_paintSurface, U"Matrix: Paint 3-D surface plot", nullptr) {
-	REAL4 (fromX, U"From x =", U"0.0")
-	REAL4 (toX, U"To x =", U"0.0")
-	REAL4 (fromY, U"From y =", U"0.0")
-	REAL4 (toY, U"To y =", U"0.0")
-	REAL4 (minimum, U"Minimum", U"0.0")
-	REAL4 (maximum, U"Maximum", U"0.0")
+	REAL (fromX, U"From x =", U"0.0")
+	REAL (toX, U"To x =", U"0.0")
+	REAL (fromY, U"From y =", U"0.0")
+	REAL (toY, U"To y =", U"0.0")
+	REAL (minimum, U"Minimum", U"0.0")
+	REAL (maximum, U"Maximum", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Matrix)
@@ -311,7 +311,7 @@ DIRECT (REAL_Matrix_getColumnDistance) {
 }
 
 FORM (REAL_Matrix_getYofRow, U"Matrix: Get y of row", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
 	OK
 DO
 	NUMBER_ONE (Matrix)
@@ -320,7 +320,7 @@ DO
 }
 
 FORM (REAL_Matrix_getXofColumn, U"Matrix: Get x of column", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	NUMBER_ONE (Matrix)
@@ -329,8 +329,8 @@ DO
 }
 
 FORM (REAL_Matrix_getValueInCell, U"Matrix: Get value in cell", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	NUMBER_ONE (Matrix)
@@ -341,8 +341,8 @@ DO
 }
 
 FORM (REAL_Matrix_getValueAtXY, U"Matrix: Get value at xy", nullptr) {
-	REALVAR (x, U"X", U"0.0")
-	REALVAR (y, U"Y", U"0.0")
+	REAL (x, U"X", U"0.0")
+	REAL (y, U"Y", U"0.0")
 	OK
 DO
 	NUMBER_ONE (Matrix)
@@ -377,7 +377,7 @@ DIRECT (REAL_Matrix_getSum) {
 FORM (MODIFY_Matrix_formula, U"Matrix Formula", U"Formula...") {
 	LABEL (U"label", U"y := y1; for row := 1 to nrow do { x := x1; "
 		"for col := 1 to ncol do { self [row, col] := `formula' ; x := x + dx } y := y + dy }")
-	TEXTFIELD4 (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH_WEAK (Matrix)
@@ -386,9 +386,9 @@ DO
 }
 
 FORM (MODIFY_Matrix_setValue, U"Matrix: Set value", U"Matrix: Set value...") {
-	NATURAL4 (rowNumber, U"Row number", U"1")
-	NATURAL4 (columnNumber, U"Column number", U"1")
-	REAL4 (newValue, U"New value", U"0.0")
+	NATURAL (rowNumber, U"Row number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
+	REAL (newValue, U"New value", U"0.0")
 	OK
 DO
 	MODIFY_EACH (Matrix)
@@ -415,7 +415,7 @@ END }
 // MARK: Synthesize
 
 FORM (NEW_Matrix_power, U"Matrix: Power...", nullptr) {
-	NATURAL4 (power, U"Power", U"2")
+	NATURAL (power, U"Power", U"2")
 	OK
 DO
 	CONVERT_EACH (Matrix)
@@ -488,7 +488,7 @@ DIRECT (NEW_Matrix_to_Sound) {
 }
 
 FORM (NEW_Matrix_to_Sound_mono, U"Matrix: To Sound (mono)", 0) {
-	INTEGER4 (rowNumber, U"Row number", U"1")
+	INTEGER (rowNumber, U"Row number", U"1")
 	LABEL (U"", U"(negative values count from last row)")
 	OK
 DO
@@ -539,23 +539,23 @@ DIRECT (NEW1_Matrix_to_ParamCurve) {
 // MARK: New
 
 FORM (NEW1_Photo_create, U"Create Photo", U"Create Photo...") {
-	WORD4 (name, U"Name", U"xy")
-	REAL4 (xmin, U"xmin", U"1.0")
-	REAL4 (xmax, U"xmax", U"1.0")
-	NATURAL4 (numberOfColumns, U"Number of columns", U"1")
-	POSITIVE4 (dx, U"dx", U"1.0")
-	REAL4 (x1, U"x1", U"1.0")
-	REAL4 (ymin, U"ymin", U"1.0")
-	REAL4 (ymax, U"ymax", U"1.0")
-	NATURAL4 (numberOfRows, U"Number of rows", U"1")
-	POSITIVE4 (dy, U"dy", U"1.0")
-	REAL4 (y1, U"y1", U"1.0")
+	WORD (name, U"Name", U"xy")
+	REAL (xmin, U"xmin", U"1.0")
+	REAL (xmax, U"xmax", U"1.0")
+	NATURAL (numberOfColumns, U"Number of columns", U"1")
+	POSITIVE (dx, U"dx", U"1.0")
+	REAL (x1, U"x1", U"1.0")
+	REAL (ymin, U"ymin", U"1.0")
+	REAL (ymax, U"ymax", U"1.0")
+	NATURAL (numberOfRows, U"Number of rows", U"1")
+	POSITIVE (dy, U"dy", U"1.0")
+	REAL (y1, U"y1", U"1.0")
 	LABEL (U"", U"Red formula:")
-	TEXTFIELD4 (redFormula, U"redFormula", U"x*y/100")
+	TEXTFIELD (redFormula, U"redFormula", U"x*y/100")
 	LABEL (U"", U"Green formula:")
-	TEXTFIELD4 (greenFormula, U"greenFormula", U"x*y/1000")
+	TEXTFIELD (greenFormula, U"greenFormula", U"x*y/1000")
 	LABEL (U"", U"Blue formula:")
-	TEXTFIELD4 (blueFormula, U"blueFormula", U"x*y/100")
+	TEXTFIELD (blueFormula, U"blueFormula", U"x*y/100")
 	OK
 DO
 	if (xmax < xmin)
@@ -573,15 +573,15 @@ DO
 }
 
 FORM (NEW1_Photo_createSimple, U"Create simple Photo", U"Create simple Photo...") {
-	WORD4 (name, U"Name", U"xy")
-	NATURAL4 (numberOfRows, U"Number of rows", U"10")
-	NATURAL4 (numberOfColumns, U"Number of columns", U"10")
+	WORD (name, U"Name", U"xy")
+	NATURAL (numberOfRows, U"Number of rows", U"10")
+	NATURAL (numberOfColumns, U"Number of columns", U"10")
 	LABEL (U"", U"Red formula:")
-	TEXTFIELD4 (redFormula, U"redFormula", U"x*y/100")
+	TEXTFIELD (redFormula, U"redFormula", U"x*y/100")
 	LABEL (U"", U"Green formula:")
-	TEXTFIELD4 (greenFormula, U"greenFormula", U"x*y/1000")
+	TEXTFIELD (greenFormula, U"greenFormula", U"x*y/1000")
 	LABEL (U"", U"Blue formula:")
-	TEXTFIELD4 (blueFormula, U"blueFormula", U"x*y/100")
+	TEXTFIELD (blueFormula, U"blueFormula", U"x*y/100")
 	OK
 DO
 	CREATE_ONE
@@ -619,7 +619,7 @@ DIRECT (NEW_Photo_extractTransparency) {
 FORM (MODIFY_Photo_formula_red, U"Photo Formula (red)", U"Formula (red)...") {
 	LABEL (U"label", U"y := y1; for row := 1 to nrow do { x := x1; "
 		"for col := 1 to ncol do { self [row, col] := `formula' ; x := x + dx } y := y + dy }")
-	TEXTFIELD4 (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH_WEAK (Photo)
@@ -630,7 +630,7 @@ DO
 FORM (MODIFY_Photo_formula_green, U"Photo Formula (green)", U"Formula (green)...") {
 	LABEL (U"label", U"y := y1; for row := 1 to nrow do { x := x1; "
 		"for col := 1 to ncol do { self [row, col] := `formula' ; x := x + dx } y := y + dy }")
-	TEXTFIELD4 (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH_WEAK (Photo)
@@ -641,7 +641,7 @@ DO
 FORM (MODIFY_Photo_formula_blue, U"Photo Formula (blue)", U"Formula (blue)...") {
 	LABEL (U"label", U"y := y1; for row := 1 to nrow do { x := x1; "
 		"for col := 1 to ncol do { self [row, col] := `formula' ; x := x + dx } y := y + dy }")
-	TEXTFIELD4 (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH_WEAK (Photo)
@@ -652,7 +652,7 @@ DO
 FORM (MODIFY_Photo_formula_transparency, U"Photo Formula (transparency)", U"Formula (transparency)...") {
 	LABEL (U"label", U"y := y1; for row := 1 to nrow do { x := x1; "
 		"for col := 1 to ncol do { self [row, col] := `formula' ; x := x + dx } y := y + dy }")
-	TEXTFIELD4 (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	OK
 DO
 	MODIFY_EACH_WEAK (Photo)
@@ -661,10 +661,10 @@ DO
 }
 
 FORM (GRAPHICS_Photo_paintCells, U"Photo: Paint cells with colour", U"Photo: Paint cells...") {
-	REAL4 (fromX, U"From x =", U"0.0")
-	REAL4 (toX, U"To x =", U"0.0")
-	REAL4 (fromY, U"From y =", U"0.0")
-	REAL4 (toY, U"To y =", U"0.0")
+	REAL (fromX, U"From x =", U"0.0")
+	REAL (toX, U"To x =", U"0.0")
+	REAL (fromY, U"From y =", U"0.0")
+	REAL (toY, U"To y =", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Photo)
@@ -673,10 +673,10 @@ DO
 }
 
 FORM (GRAPHICS_Photo_paintImage, U"Photo: Paint colour image", nullptr) {
-	REAL4 (fromX, U"From x =", U"0.0")
-	REAL4 (toX, U"To x =", U"0.0")
-	REAL4 (fromY, U"From y =", U"0.0")
-	REAL4 (toY, U"To y =", U"0.0")
+	REAL (fromX, U"From x =", U"0.0")
+	REAL (toX, U"To x =", U"0.0")
+	REAL (fromY, U"From y =", U"0.0")
+	REAL (toY, U"To y =", U"0.0")
 	OK
 DO
 	GRAPHICS_EACH (Photo)
@@ -767,11 +767,11 @@ FORM_READ (READ1_Movie_openFromSoundFile, U"Open movie file", nullptr, true) {
 }
 
 FORM (GRAPHICS_Movie_paintOneImage, U"Movie: Paint one image", nullptr) {
-	NATURAL4 (frameNumber, U"Frame number", U"1")
-	REAL4 (fromX, U"From x =", U"0.0")
-	REAL4 (toX, U"To x =", U"1.0")
-	REAL4 (fromY, U"From y =", U"0.0")
-	REAL4 (toY, U"To y =", U"1.0")
+	NATURAL (frameNumber, U"Frame number", U"1")
+	REAL (fromX, U"From x =", U"0.0")
+	REAL (toX, U"To x =", U"1.0")
+	REAL (fromY, U"From y =", U"0.0")
+	REAL (toY, U"To y =", U"1.0")
 	OK
 DO
 	GRAPHICS_EACH (Movie)
@@ -790,7 +790,7 @@ DIRECT (WINDOW_Movie_viewAndEdit) {
 
 // MARK: file recognizers
 
-static autoDaata imageFileRecognizer (int /* nread */, const char * /* header */, MelderFile file) {
+static autoDaata imageFileRecognizer (integer /* nread */, const char * /* header */, MelderFile file) {
 	const char32 *fileName = MelderFile_name (file);
 	if (Melder_stringMatchesCriterion (fileName, kMelder_string::ENDS_WITH, U".jpg") ||
 	    Melder_stringMatchesCriterion (fileName, kMelder_string::ENDS_WITH, U".JPG") ||
diff --git a/fon/praat_Sound.cpp b/fon/praat_Sound.cpp
index ac91d03..336e88d 100644
--- a/fon/praat_Sound.cpp
+++ b/fon/praat_Sound.cpp
@@ -50,9 +50,9 @@ DIRECT (INFO_LongSound_concatenate) {
 }
 
 FORM (NEW_LongSound_extractPart, U"LongSound: Extract part", nullptr) {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"1.0")
-	BOOLEAN4 (preserveTimes, U"Preserve times", true)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"1.0")
+	BOOLEAN (preserveTimes, U"Preserve times", true)
 	OK
 DO
 	CONVERT_EACH (LongSound)
@@ -61,7 +61,7 @@ DO
 }
 
 FORM (REAL_LongSound_getIndexFromTime, U"LongSound: Get sample index from time", U"Sound: Get index from time...") {
-	REAL4 (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (LongSound)
@@ -82,7 +82,7 @@ DIRECT (REAL_LongSound_getSampleRate) {
 }
 
 FORM (REAL_LongSound_getTimeFromIndex, U"LongSound: Get time from sample index", U"Sound: Get time from index...") {
-	INTEGER4 (sampleIndex, U"Sample index", U"100")
+	INTEGER (sampleIndex, U"Sample index", U"100")
 	OK
 DO
 	NUMBER_ONE (LongSound)
@@ -107,8 +107,8 @@ FORM_READ (READ1_LongSound_open, U"Open long sound file", nullptr, true) {
 }
 
 FORM (PLAY_LongSound_playPart, U"LongSound: Play part", nullptr) {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"10.0")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"10.0")
 	OK
 DO
 	int n = 0;
@@ -130,13 +130,13 @@ END }
 
 FORM (SAVE_LongSound_savePartAsAudioFile, U"LongSound: Save part as audio file", nullptr) {
 	LABEL (U"", U"Audio file:")
-	TEXTFIELD4 (audioFile, U"Audio file", U"")
-	RADIOVAR (type, U"Type", 3)
+	TEXTFIELD (audioFile, U"Audio file", U"")
+	RADIO (type, U"Type", 3)
 	{ int i; for (i = 1; i <= Melder_NUMBER_OF_AUDIO_FILE_TYPES; i ++) {
 		RADIOBUTTON (Melder_audioFileTypeString (i))
 	}}
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"10.0")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"10.0")
 	OK
 DO
 	SAVE_ONE (LongSound)
@@ -147,8 +147,8 @@ DO
 }
 
 FORM (NEW_LongSound_to_TextGrid, U"LongSound: To TextGrid...", U"LongSound: To TextGrid...") {
-	SENTENCE4 (tierNames, U"Tier names", U"Mary John bell")
-	SENTENCE4 (pointTiers, U"Point tiers", U"bell")
+	SENTENCE (tierNames, U"Tier names", U"Mary John bell")
+	SENTENCE (pointTiers, U"Point tiers", U"bell")
 	OK
 DO
 	CONVERT_EACH (LongSound)
@@ -277,13 +277,13 @@ FORM (PREFS_LongSoundPrefs, U"LongSound preferences", U"LongSound") {
 	LABEL (U"", U"This setting determines the maximum number of seconds")
 	LABEL (U"", U"for viewing the waveform and playing a sound in the LongSound window.")
 	LABEL (U"", U"The LongSound window can become very slow if you set it too high.")
-	NATURAL (U"Maximum viewable part (seconds)", U"60")
+	NATURAL (maximumViewablePart, U"Maximum viewable part (seconds)", U"60")
 	LABEL (U"", U"Note: this setting works for the next long sound file that you open,")
 	LABEL (U"", U"not for currently existing LongSound objects.")
 OK
 	SET_INTEGER (U"Maximum viewable part", LongSound_getBufferSizePref_seconds ())
 DO
-	LongSound_setBufferSizePref_seconds (GET_INTEGER (U"Maximum viewable part"));
+	LongSound_setBufferSizePref_seconds (maximumViewablePart);
 END }
 
 /********** LONGSOUND & SOUND **********/
@@ -329,29 +329,23 @@ FORM_SAVE (SAVE_LongSound_Sound_saveAsWavFile, U"Save as WAV file", nullptr, U"w
 FORM (MODIFY_Sound_add, U"Sound: Add", nullptr) {
 	LABEL (U"", U"The following number will be added to the amplitudes of ")
 	LABEL (U"", U"all samples of the sound.")
-	REALVAR (number, U"Number", U"0.1")
+	REAL (number, U"Number", U"0.1")
 	OK
 DO
-	LOOP {
-		iam (Sound);
+	MODIFY_EACH (Sound)
 		Vector_addScalar (me, number);
-		praat_dataChanged (me);
-	}
-END }
+	MODIFY_EACH_END
+}
 
 FORM (NEW_Sound_autoCorrelate, U"Sound: autocorrelate", U"Sound: Autocorrelate...") {
-	RADIO_ENUM (U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
-	RADIO_ENUM (U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
+	RADIO_ENUM (amplitudeScaling, U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
+	RADIO_ENUM (signalOutsideTimeDomainIs, U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
  	OK
 DO
-	LOOP {
-		iam (Sound);
-		autoSound thee = Sound_autoCorrelate (me,
-			GET_ENUM (kSounds_convolve_scaling, U"Amplitude scaling"),
-			GET_ENUM (kSounds_convolve_signalOutsideTimeDomain, U"Signal outside time domain is..."));
-		praat_new (thee.move(), U"ac_", my name);
-	}
-END }
+	CONVERT_EACH (Sound)
+		autoSound result = Sound_autoCorrelate (me, amplitudeScaling, signalOutsideTimeDomainIs);
+	CONVERT_EACH_END (U"ac_", my name)
+}
 
 DIRECT (NEW1_Sounds_combineToStereo) {
 	CONVERT_LIST (Sound)
@@ -367,7 +361,7 @@ DIRECT (NEW1_Sounds_concatenate) {
 }
 
 FORM (NEW1_Sounds_concatenateWithOverlap, U"Sounds: Concatenate with overlap", U"Sounds: Concatenate with overlap...") {
-	POSITIVE4 (overlap, U"Overlap (s)", U"0.01")
+	POSITIVE (overlap, U"Overlap (s)", U"0.01")
 	OK
 DO
 	CONVERT_LIST (Sound)
@@ -435,8 +429,8 @@ DIRECT (NEW1_Sounds_convolve_old) {
 }
 
 FORM (NEW1_Sounds_convolve, U"Sounds: Convolve", U"Sounds: Convolve...") {
-	RADIO_ENUM4 (amplitudeScaling, U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
-	RADIO_ENUM4 (signalOutsideTimeDomainIs, U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
+	RADIO_ENUM (amplitudeScaling, U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
+	RADIO_ENUM (signalOutsideTimeDomainIs, U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
 	OK
 DO
 	CONVERT_COUPLE (Sound)
@@ -504,40 +498,40 @@ static void common_Sound_create (const char32 *name, long numberOfChannels, doub
 }
 
 FORM (NEW1_Sound_create, U"Create mono Sound", U"Create Sound from formula...") {
-	WORDVAR (name, U"Name", U"sineWithNoise")
-	REALVAR (startTime, U"Start time (s)", U"0.0")
-	REALVAR (endTime, U"End time (s)", U"1.0")
-	REALVAR (samplingFrequency, U"Sampling frequency (Hz)", U"44100")
+	WORD (name, U"Name", U"sineWithNoise")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
+	REAL (samplingFrequency, U"Sampling frequency (Hz)", U"44100")
 	LABEL (U"", U"Formula:")
-	TEXTVAR (formula, U"formula", U"1/2 * sin(2*pi*377*x) + randomGauss(0,0.1)")
+	TEXTFIELD (formula, U"formula", U"1/2 * sin(2*pi*377*x) + randomGauss(0,0.1)")
 	OK
 DO
 	common_Sound_create (name, 1, startTime, endTime, samplingFrequency, formula, interpreter);
 END }
 
 FORM (NEW1_Sound_createFromFormula, U"Create Sound from formula", U"Create Sound from formula...") {
-	WORDVAR (name, U"Name", U"sineWithNoise")
-	CHANNELVAR (numberOfChannels, U"Number of channels", U"1 (= mono)")
-	REALVAR (startTime, U"Start time (s)", U"0.0")
-	REALVAR (endTime, U"End time (s)", U"1.0")
-	REALVAR (samplingFrequency, U"Sampling frequency (Hz)", U"44100")
+	WORD (name, U"Name", U"sineWithNoise")
+	CHANNEL (numberOfChannels, U"Number of channels", U"1 (= mono)")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
+	REAL (samplingFrequency, U"Sampling frequency (Hz)", U"44100")
 	LABEL (U"", U"Formula:")
-	TEXTVAR (formula, U"formula", U"1/2 * sin(2*pi*377*x) + randomGauss(0,0.1)")
+	TEXTFIELD (formula, U"formula", U"1/2 * sin(2*pi*377*x) + randomGauss(0,0.1)")
 	OK
 DO
 	common_Sound_create (name, numberOfChannels, startTime, endTime, samplingFrequency, formula, interpreter);
 END }
 
 FORM (NEW1_Sound_createAsPureTone, U"Create Sound as pure tone", U"Create Sound as pure tone...") {
-	WORDVAR (name, U"Name", U"tone")
-	CHANNELVAR (numberOfChannels, U"Number of channels", U"1 (= mono)")
-	REALVAR (startTime, U"Start time (s)", U"0.0")
-	REALVAR (endTime, U"End time (s)", U"0.4")
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
-	POSITIVEVAR (toneFrequency, U"Tone frequency (Hz)", U"440.0")
-	POSITIVEVAR (amplitude, U"Amplitude (Pa)", U"0.2")
-	POSITIVEVAR (fadeInDuration, U"Fade-in duration (s)", U"0.01")
-	POSITIVEVAR (fadeOutDuration, U"Fade-out duration (s)", U"0.01")
+	WORD (name, U"Name", U"tone")
+	CHANNEL (numberOfChannels, U"Number of channels", U"1 (= mono)")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"0.4")
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	POSITIVE (toneFrequency, U"Tone frequency (Hz)", U"440.0")
+	POSITIVE (amplitude, U"Amplitude (Pa)", U"0.2")
+	POSITIVE (fadeInDuration, U"Fade-in duration (s)", U"0.01")
+	POSITIVE (fadeOutDuration, U"Fade-out duration (s)", U"0.01")
 	OK
 DO
 	CREATE_ONE
@@ -547,17 +541,17 @@ DO
 }
 
 FORM (NEW1_Sound_createAsToneComplex, U"Create Sound as tone complex", U"Create Sound as tone complex...") {
-	WORDVAR (name, U"Name", U"toneComplex")
-	REALVAR (startTime, U"Start time (s)", U"0.0")
-	REALVAR (endTime, U"End time (s)", U"1.0")
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
-	RADIOVARx (phase, U"Phase", 2, Sound_TONE_COMPLEX_SINE)
+	WORD (name, U"Name", U"toneComplex")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	RADIOx (phase, U"Phase", 2, Sound_TONE_COMPLEX_SINE)
 		RADIOBUTTON (U"sine")
 		RADIOBUTTON (U"cosine")
-	POSITIVEVAR (frequencyStep, U"Frequency step (Hz)", U"100.0")
-	REALVAR (firstFrequency, U"First frequency (Hz)", U"0.0 (= frequency step)")
-	REALVAR (ceiling, U"Ceiling (Hz)", U"0.0 (= Nyquist)")
-	INTEGERVAR (numberOfComponents, U"Number of components", U"0 (= maximum)")
+	POSITIVE (frequencyStep, U"Frequency step (Hz)", U"100.0")
+	REAL (firstFrequency, U"First frequency (Hz)", U"0.0 (= frequency step)")
+	REAL (ceiling, U"Ceiling (Hz)", U"0.0 (= Nyquist)")
+	INTEGER (numberOfComponents, U"Number of components", U"0 (= maximum)")
 	OK
 DO
 	CREATE_ONE
@@ -567,9 +561,9 @@ DO
 }
 
 FORM (NEW1_old_Sounds_crossCorrelate, U"Cross-correlate (short)", nullptr) {
-	REAL4 (fromLag, U"From lag (s)", U"-0.1")
-	REAL4 (toLag, U"To lag (s)", U"0.1")
-	BOOLEAN4 (normalize, U"Normalize", true)
+	REAL (fromLag, U"From lag (s)", U"-0.1")
+	REAL (toLag, U"To lag (s)", U"0.1")
+	BOOLEAN (normalize, U"Normalize", true)
 	OK
 DO
 	CONVERT_COUPLE (Sound)
@@ -578,8 +572,8 @@ DO
 }
 
 FORM (NEW1_Sounds_crossCorrelate, U"Sounds: Cross-correlate", U"Sounds: Cross-correlate...") {
-	RADIO_ENUM4 (amplitudeScaling, U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
-	RADIO_ENUM4 (signalOutsideTimeDomainIs, U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
+	RADIO_ENUM (amplitudeScaling, U"Amplitude scaling", kSounds_convolve_scaling, DEFAULT)
+	RADIO_ENUM (signalOutsideTimeDomainIs, U"Signal outside time domain is...", kSounds_convolve_signalOutsideTimeDomain, DEFAULT)
 	OK
 DO_ALTERNATIVE (NEW1_old_Sounds_crossCorrelate)
 	CONVERT_COUPLE (Sound)
@@ -590,7 +584,7 @@ DO_ALTERNATIVE (NEW1_old_Sounds_crossCorrelate)
 }
 
 FORM (MODIFY_Sound_deemphasizeInline, U"Sound: De-emphasize (in-line)", U"Sound: De-emphasize (in-line)...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"50.0")
+	REAL (fromFrequency, U"From frequency (Hz)", U"50.0")
 	OK
 DO
 	MODIFY_EACH (Sound)
@@ -600,12 +594,12 @@ DO
 }
 
 FORM (NEW_Sound_deepenBandModulation, U"Deepen band modulation", U"Sound: Deepen band modulation...") {
-	POSITIVE4 (enhancement, U"Enhancement (dB)", U"20.0")
-	POSITIVE4 (fromFrequency, U"From frequency (Hz)", U"300.0")
-	POSITIVE4 (toFrequency, U"To frequency (Hz)", U"8000.0")
-	POSITIVE4 (slowModulation, U"Slow modulation (Hz)", U"3.0")
-	POSITIVE4 (fastModulation, U"Fast modulation (Hz)", U"30.0")
-	POSITIVE4 (bandSmoothing, U"Band smoothing (Hz)", U"100.0")
+	POSITIVE (enhancement, U"Enhancement (dB)", U"20.0")
+	POSITIVE (fromFrequency, U"From frequency (Hz)", U"300.0")
+	POSITIVE (toFrequency, U"To frequency (Hz)", U"8000.0")
+	POSITIVE (slowModulation, U"Slow modulation (Hz)", U"3.0")
+	POSITIVE (fastModulation, U"Fast modulation (Hz)", U"30.0")
+	POSITIVE (bandSmoothing, U"Band smoothing (Hz)", U"100.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -615,11 +609,11 @@ DO
 }
 
 FORM (GRAPHICS_old_Sound_draw, U"Sound: Draw", nullptr) {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range", U"0.0 (= all)")
-	REAL4 (fromAmplitude, U"left Amplitude range", U"0.0")
-	REAL4 (toAmplitude, U"right Amplitude range", U"0.0 (= auto)")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range", U"0.0 (= all)")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0 (= auto)")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Sound)
@@ -629,13 +623,13 @@ DO
 }
 
 FORM (GRAPHICS_Sound_draw, U"Sound: Draw", nullptr) {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range", U"0.0 (= all)")
-	REAL4 (fromAmplitude, U"left Amplitude range", U"0.0")
-	REAL4 (toAmplitude, U"right Amplitude range", U"0.0 (= auto)")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range", U"0.0 (= all)")
+	REAL (fromAmplitude, U"left Amplitude range", U"0.0")
+	REAL (toAmplitude, U"right Amplitude range", U"0.0 (= auto)")
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"")
-	OPTIONMENUSTR4 (drawingMethod, U"Drawing method", 1)
+	OPTIONMENUSTR (drawingMethod, U"Drawing method", 1)
 		OPTION (U"Curve")
 		OPTION (U"Bars")
 		OPTION (U"Poles")
@@ -689,7 +683,7 @@ DIRECT (NEWMANY_Sound_extractAllChannels) {
 }
 
 FORM (NEW_Sound_extractChannel, U"Sound: Extract channel", nullptr) {
-	CHANNEL4 (channel, U"Channel (number, Left, or Right)", U"1")
+	CHANNEL (channel, U"Channel (number, Left, or Right)", U"1")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -704,11 +698,11 @@ DIRECT (NEW_Sound_extractLeftChannel) {
 }
 
 FORM (NEW_Sound_extractPart, U"Sound: Extract part", nullptr) {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.1")
-	OPTIONMENU_ENUM4 (windowShape, U"Window shape", kSound_windowShape, DEFAULT)
-	POSITIVE4 (relativeWidth, U"Relative width", U"1.0")
-	BOOLEAN4 (preserveTimes, U"Preserve times", false)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.1")
+	OPTIONMENU_ENUM (windowShape, U"Window shape", kSound_windowShape, DEFAULT)
+	POSITIVE (relativeWidth, U"Relative width", U"1.0")
+	BOOLEAN (preserveTimes, U"Preserve times", false)
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -718,9 +712,9 @@ DO
 }
 
 FORM (NEW_Sound_extractPartForOverlap, U"Sound: Extract part for overlap", nullptr) {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.1")
-	POSITIVE4 (overlap, U"Overlap (s)", U"0.01")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.1")
+	POSITIVE (overlap, U"Overlap (s)", U"0.01")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -735,7 +729,7 @@ DIRECT (NEW_Sound_extractRightChannel) {
 }
 
 FORM (NEW_Sound_filter_deemphasis, U"Sound: Filter (de-emphasis)", U"Sound: Filter (de-emphasis)...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"50.0")
+	REAL (fromFrequency, U"From frequency (Hz)", U"50.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -745,7 +739,7 @@ DO
 
 FORM (NEW_Sound_filter_formula, U"Sound: Filter (formula)...", U"Formula...") {
 	LABEL (U"", U"Frequency-domain filtering with a formula (uses Sound-to-Spectrum and Spectrum-to-Sound): x is frequency in hertz")
-	TEXTFIELD4 (formula, U"formula", U"if x<500 or x>1000 then 0 else self fi; rectangular band filter")
+	TEXTFIELD (formula, U"formula", U"if x<500 or x>1000 then 0 else self fi; rectangular band filter")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -754,8 +748,8 @@ DO
 }
 
 FORM (NEW_Sound_filter_oneFormant, U"Sound: Filter (one formant)", U"Sound: Filter (one formant)...") {
-	REAL4 (frequency, U"Frequency (Hz)", U"1000.0")
-	POSITIVE4 (bandwidth, U"Bandwidth (Hz)", U"100.0")
+	REAL (frequency, U"Frequency (Hz)", U"1000.0")
+	POSITIVE (bandwidth, U"Bandwidth (Hz)", U"100.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -764,8 +758,8 @@ DO
 }
 
 FORM (MODIFY_Sound_filterWithOneFormantInline, U"Sound: Filter with one formant (in-line)", U"Sound: Filter with one formant (in-line)...") {
-	REAL4 (frequency, U"Frequency (Hz)", U"1000.0")
-	POSITIVE4 (bandwidth, U"Bandwidth (Hz)", U"100.0")
+	REAL (frequency, U"Frequency (Hz)", U"1000.0")
+	POSITIVE (bandwidth, U"Bandwidth (Hz)", U"100.0")
 	OK
 DO
 	MODIFY_EACH (Sound)
@@ -774,9 +768,9 @@ DO
 }
 
 FORM (NEW_Sound_filter_passHannBand, U"Sound: Filter (pass Hann band)", U"Sound: Filter (pass Hann band)...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"500.0")
-	REAL4 (toFrequency, U"To frequency (Hz)", U"1000.0")
-	POSITIVE4 (smoothing, U"Smoothing (Hz)", U"100.0")
+	REAL (fromFrequency, U"From frequency (Hz)", U"500.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"1000.0")
+	POSITIVE (smoothing, U"Smoothing (Hz)", U"100.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -785,7 +779,7 @@ DO
 }
 
 FORM (NEW_Sound_filter_preemphasis, U"Sound: Filter (pre-emphasis)", U"Sound: Filter (pre-emphasis)...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"50.0")
+	REAL (fromFrequency, U"From frequency (Hz)", U"50.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -794,9 +788,9 @@ DO
 }
 
 FORM (NEW_Sound_filter_stopHannBand, U"Sound: Filter (stop Hann band)", U"Sound: Filter (stop Hann band)...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"500.0")
-	REAL4 (toFrequency, U"To frequency (Hz)", U"1000.0")
-	POSITIVE4 (smoothing, U"Smoothing (Hz)", U"100.0")
+	REAL (fromFrequency, U"From frequency (Hz)", U"500.0")
+	REAL (toFrequency, U"To frequency (Hz)", U"1000.0")
+	POSITIVE (smoothing, U"Smoothing (Hz)", U"100.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -809,7 +803,7 @@ FORM (MODIFY_Sound_formula, U"Sound: Formula", U"Sound: Formula...") {
 	LABEL (U"label2", U"x = x1   ! time associated with first sample")
 	LABEL (U"label3", U"for col from 1 to ncol")
 	LABEL (U"label4", U"   self [col] = ...")
-	TEXTFIELD4 (formula, U"formula", U"self")
+	TEXTFIELD (formula, U"formula", U"self")
 	LABEL (U"label5", U"   x = x + dx")
 	LABEL (U"label6", U"endfor")
 	OK
@@ -820,11 +814,11 @@ DO
 }
 
 FORM (MODIFY_Sound_formula_part, U"Sound: Formula (part)", U"Sound: Formula...") {
-	REAL4 (fromTime, U"From time", U"0.0")
-	REAL4 (toTime, U"To time", U"0.0 (= all)")
-	NATURAL4 (fromChannel, U"From channel", U"1")
-	NATURAL4 (toChannel, U"To channel", U"2")
-	TEXTFIELD4 (formula, U"formula", U"2 * self")
+	REAL (fromTime, U"From time", U"0.0")
+	REAL (toTime, U"To time", U"0.0 (= all)")
+	NATURAL (fromChannel, U"From channel", U"1")
+	NATURAL (toChannel, U"To channel", U"2")
+	TEXTFIELD (formula, U"formula", U"2 * self")
 	OK
 DO
 	MODIFY_EACH_WEAK (Sound)
@@ -835,9 +829,9 @@ DO
 }
 
 FORM (REAL_Sound_getAbsoluteExtremum, U"Sound: Get absolute extremum", U"Sound: Get absolute extremum...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -851,8 +845,8 @@ DO
 }
 
 FORM (REAL_Sound_getEnergy, U"Sound: Get energy", U"Sound: Get energy...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
 	OK
 DO
 	NUMBER_ONE (Sound)
@@ -867,7 +861,7 @@ DIRECT (REAL_Sound_getEnergyInAir) {
 }
 
 FORM (REAL_Sound_getIndexFromTime, U"Get sample number from time", U"Get sample number from time...") {
-	REAL4 (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (Sound)
@@ -882,9 +876,9 @@ DIRECT (REAL_Sound_getIntensity_dB) {
 }
 
 FORM (REAL_Sound_getMaximum, U"Sound: Get maximum", U"Sound: Get maximum...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -898,8 +892,8 @@ DO
 }
 
 FORM (REAL_old_Sound_getMean, U"Sound: Get mean", U"Sound: Get mean...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
 	OK
 DO
 	NUMBER_ONE (Sound)
@@ -908,9 +902,9 @@ DO
 }
 
 FORM (REAL_Sound_getMean, U"Sound: Get mean", U"Sound: Get mean...") {
-	CHANNEL4 (channel, U"Channel", U"0 (= all)")
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
+	CHANNEL (channel, U"Channel", U"0 (= all)")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
 	OK
 DO_ALTERNATIVE (REAL_old_Sound_getMean)
 	NUMBER_ONE (Sound)
@@ -920,9 +914,9 @@ DO_ALTERNATIVE (REAL_old_Sound_getMean)
 }
 
 FORM (REAL_Sound_getMinimum, U"Sound: Get minimum", U"Sound: Get minimum...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -936,7 +930,7 @@ DO
 }
 
 FORM (REAL_old_Sound_getNearestZeroCrossing, U"Sound: Get nearest zero crossing", U"Sound: Get nearest zero crossing...") {
-	REAL4 (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (Sound)
@@ -946,8 +940,8 @@ DO
 }
 
 FORM (REAL_Sound_getNearestZeroCrossing, U"Sound: Get nearest zero crossing", U"Sound: Get nearest zero crossing...") {
-	CHANNEL4 (channel, U"Channel (number, Left, or Right)", U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	CHANNEL (channel, U"Channel (number, Left, or Right)", U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO_ALTERNATIVE (REAL_old_Sound_getNearestZeroCrossing)
 	NUMBER_ONE (Sound)
@@ -969,8 +963,8 @@ DIRECT (INTEGER_Sound_getNumberOfSamples) {
 }
 
 FORM (REAL_Sound_getPower, U"Sound: Get power", U"Sound: Get power...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
 	OK
 DO
 	NUMBER_ONE (Sound)
@@ -985,8 +979,8 @@ DIRECT (REAL_Sound_getPowerInAir) {
 }
 
 FORM (REAL_Sound_getRootMeanSquare, U"Sound: Get root-mean-square", U"Sound: Get root-mean-square...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
 	OK
 DO
 	NUMBER_ONE (Sound)
@@ -1007,8 +1001,8 @@ DIRECT (REAL_Sound_getSampleRate) {
 }
 
 FORM (REAL_old_Sound_getStandardDeviation, U"Sound: Get standard deviation", U"Sound: Get standard deviation...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
 	OK
 DO
 	NUMBER_ONE (Sound)
@@ -1017,9 +1011,9 @@ DO
 }
 
 FORM (REAL_Sound_getStandardDeviation, U"Sound: Get standard deviation", U"Sound: Get standard deviation...") {
-	CHANNEL4 (channel, U"Channel", U"0 (= average)")
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
+	CHANNEL (channel, U"Channel", U"0 (= average)")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
 	OK
 DO_ALTERNATIVE (REAL_old_Sound_getStandardDeviation)
 	NUMBER_ONE (Sound)
@@ -1029,7 +1023,7 @@ DO_ALTERNATIVE (REAL_old_Sound_getStandardDeviation)
 }
 
 FORM (REAL_Sound_getTimeFromIndex, U"Get time from sample number", U"Get time from sample number...") {
-	INTEGER4 (sampleNumber, U"Sample number", U"100")
+	INTEGER (sampleNumber, U"Sample number", U"100")
 	OK
 DO
 	NUMBER_ONE (Sound)
@@ -1037,10 +1031,16 @@ DO
 	NUMBER_ONE_END (U" seconds")
 }
 
+DIRECT (NUMVEC_Sound_getSampleTimes) {
+	NUMVEC_ONE (Sound)
+		autonumvec result = Sampled_getX_numvec (me);
+	NUMVEC_ONE_END
+}
+
 FORM (REAL_Sound_getTimeOfMaximum, U"Sound: Get time of maximum", U"Sound: Get time of maximum...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -1054,9 +1054,9 @@ DO
 }
 
 FORM (REAL_Sound_getTimeOfMinimum, U"Sound: Get time of minimum", U"Sound: Get time of minimum...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -1070,7 +1070,7 @@ DO
 }
 
 FORM (REAL_old_Sound_getValueAtIndex, U"Sound: Get value at sample number", U"Sound: Get value at sample number...") {
-	INTEGER4 (sampleNumber, U"Sample number", U"100")
+	INTEGER (sampleNumber, U"Sample number", U"100")
 	OK
 DO
 	NUMBER_ONE (Sound)
@@ -1080,8 +1080,8 @@ DO
 }
 
 FORM (REAL_Sound_getValueAtIndex, U"Sound: Get value at sample number", U"Sound: Get value at sample number...") {
-	CHANNEL4 (channel, U"Channel", U"0 (= average)")
-	INTEGER4 (sampleNumber, U"Sample number", U"100")
+	CHANNEL (channel, U"Channel", U"0 (= average)")
+	INTEGER (sampleNumber, U"Sample number", U"100")
 	OK
 DO_ALTERNATIVE (REAL_old_Sound_getValueAtIndex)
 	NUMBER_ONE (Sound)
@@ -1092,8 +1092,8 @@ DO_ALTERNATIVE (REAL_old_Sound_getValueAtIndex)
 }
 
 FORM (REAL_old_Sound_getValueAtTime, U"Sound: Get value at time", U"Sound: Get value at time...") {
-	REAL4 (time, U"Time (s)", U"0.5")
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	REAL (time, U"Time (s)", U"0.5")
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"Nearest")
 		RADIOBUTTON (U"Linear")
 		RADIOBUTTON (U"Cubic")
@@ -1107,9 +1107,9 @@ DO
 }
 
 FORM (REAL_Sound_getValueAtTime, U"Sound: Get value at time", U"Sound: Get value at time...") {
-	CHANNEL4 (channel, U"Channel", U"0 (= average)")
-	REAL4 (time, U"Time (s)", U"0.5")
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	CHANNEL (channel, U"Channel", U"0 (= average)")
+	REAL (time, U"Time (s)", U"0.5")
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"Nearest")
 		RADIOBUTTON (U"Linear")
 		RADIOBUTTON (U"Cubic")
@@ -1128,9 +1128,9 @@ DIRECT (HELP_Sound_help) {
 }
 
 FORM (NEW_Sound_lengthen_overlapAdd, U"Sound: Lengthen (overlap-add)", U"Sound: Lengthen (overlap-add)...") {
-	POSITIVE4 (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
-	POSITIVE4 (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
-	POSITIVE4 (factor, U"Factor", U"1.5")
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
+	POSITIVE (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
+	POSITIVE (factor, U"Factor", U"1.5")
 	OK
 DO
 	if (minimumPitch >= maximumPitch) Melder_throw (U"Maximum pitch should be greater than minimum pitch.");
@@ -1140,7 +1140,7 @@ DO
 }
 
 FORM (MODIFY_Sound_multiply, U"Sound: Multiply", nullptr) {
-	REAL4 (multiplicationFactor, U"Multiplication factor", U"1.5")
+	REAL (multiplicationFactor, U"Multiplication factor", U"1.5")
 	OK
 DO
 	MODIFY_EACH (Sound)
@@ -1149,7 +1149,7 @@ DO
 }
 
 FORM (MODIFY_Sound_multiplyByWindow, U"Sound: Multiply by window", nullptr) {
-	OPTIONMENU_ENUM4 (windowShape, U"Window shape", kSound_windowShape, HANNING)
+	OPTIONMENU_ENUM (windowShape, U"Window shape", kSound_windowShape, HANNING)
 	OK
 DO
 	MODIFY_EACH (Sound)
@@ -1158,7 +1158,7 @@ DO
 }
 
 FORM (MODIFY_Sound_overrideSamplingFrequency, U"Sound: Override sampling frequency", nullptr) {
-	POSITIVE4 (newSamplingFrequency, U"New sampling frequency (Hz)", U"16000.0")
+	POSITIVE (newSamplingFrequency, U"New sampling frequency (Hz)", U"16000.0")
 	OK
 DO
 	MODIFY_EACH (Sound)
@@ -1187,7 +1187,7 @@ DIRECT (PLAY_Sound_play) {
 END }
 
 FORM (MODIFY_Sound_preemphasizeInline, U"Sound: Pre-emphasize (in-line)", U"Sound: Pre-emphasize (in-line)...") {
-	REAL4 (fromFrequency, U"From frequency (Hz)", U"50.0")
+	REAL (fromFrequency, U"From frequency (Hz)", U"50.0")
 	OK
 DO
 	MODIFY_EACH (Sound)
@@ -1254,12 +1254,12 @@ DIRECT (WINDOW_Sound_recordStereo) {
 END }
 
 FORM (RECORD1_Sound_record_fixedTime, U"Record Sound", nullptr) {
-	RADIO4 (inputSource, U"Input source", 1)
+	RADIO (inputSource, U"Input source", 1)
 		RADIOBUTTON (U"Microphone")
 		RADIOBUTTON (U"Line")
-	REAL4 (gain, U"Gain (0-1)", U"0.1")
-	REAL4 (balance, U"Balance (0-1)", U"0.5")
-	RADIOSTR4 (samplingFrequency, U"Sampling frequency", 1)
+	REAL (gain, U"Gain (0-1)", U"0.1")
+	REAL (balance, U"Balance (0-1)", U"0.5")
+	RADIOSTR (samplingFrequency, U"Sampling frequency", 1)
 		#ifdef UNIX
 		RADIOBUTTON (U"8000")
 		#endif
@@ -1278,7 +1278,7 @@ FORM (RECORD1_Sound_record_fixedTime, U"Record Sound", nullptr) {
 		RADIOBUTTON (U"44100")
 		RADIOBUTTON (U"48000")
 		RADIOBUTTON (U"96000")
-	POSITIVE4 (duration, U"Duration (seconds)", U"1.0")
+	POSITIVE (duration, U"Duration (seconds)", U"1.0")
 	OK
 DO
 	CREATE_ONE
@@ -1322,8 +1322,8 @@ void* Praat_Sound_resample (void* sound, double newSamplingFrequency, int precis
 #endif
 
 FORM (NEW_Sound_resample, U"Sound: Resample", U"Sound: Resample...") {
-	POSITIVE4 (newSamplingFrequency, U"New sampling frequency (Hz)", U"10000.0")
-	NATURAL4 (precision, U"Precision (samples)", U"50")
+	POSITIVE (newSamplingFrequency, U"New sampling frequency (Hz)", U"10000.0")
+	NATURAL (precision, U"Precision (samples)", U"50")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1350,7 +1350,7 @@ FORM_SAVE (SAVE_Sound_saveAs32BitWavFile, U"Save as 32-bit WAV file", nullptr, U
 }
 
 FORM (MODIFY_Sound_scalePeak, U"Sound: Scale peak", U"Sound: Scale peak...") {
-	POSITIVE4 (newAbsolutePeak, U"New absolute peak", U"0.99")
+	POSITIVE (newAbsolutePeak, U"New absolute peak", U"0.99")
 	OK
 DO
 	MODIFY_EACH (Sound)
@@ -1359,7 +1359,7 @@ DO
 }
 
 FORM (MODIFY_Sound_scaleIntensity, U"Sound: Scale intensity", U"Sound: Scale intensity...") {
-	POSITIVE4 (newAverageIntensity, U"New average intensity (dB SPL)", U"70.0")
+	POSITIVE (newAverageIntensity, U"New average intensity (dB SPL)", U"70.0")
 	OK
 DO
 	MODIFY_EACH (Sound)
@@ -1368,8 +1368,8 @@ DO
 }
 
 FORM (MODIFY_old_Sound_setValueAtIndex, U"Sound: Set value at sample number", U"Sound: Set value at sample number...") {
-	NATURAL4 (sampleNumber, U"Sample number", U"100")
-	REAL4 (newValue, U"New value", U"0.0")
+	NATURAL (sampleNumber, U"Sample number", U"100")
+	REAL (newValue, U"New value", U"0.0")
 	OK
 DO
 	MODIFY_EACH (Sound)
@@ -1381,9 +1381,9 @@ DO
 }
 
 FORM (MODIFY_Sound_setValueAtIndex, U"Sound: Set value at sample number", U"Sound: Set value at sample number...") {
-	CHANNEL4 (channel, U"Channel", U"0 (= all)")
-	NATURAL4 (sampleNumber, U"Sample number", U"100")
-	REAL4 (newValue, U"New value", U"0.0")
+	CHANNEL (channel, U"Channel", U"0 (= all)")
+	NATURAL (sampleNumber, U"Sample number", U"100")
+	REAL (newValue, U"New value", U"0.0")
 	OK
 DO_ALTERNATIVE (MODIFY_old_Sound_setValueAtIndex)
 	MODIFY_EACH (Sound)
@@ -1401,9 +1401,9 @@ DO_ALTERNATIVE (MODIFY_old_Sound_setValueAtIndex)
 }
 
 FORM (MODIFY_Sound_setPartToZero, U"Sound: Set part to zero", nullptr) {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"0.0 (= all)")
-	RADIO4x (cut, U"Cut", 2, 0)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
+	RADIOx (cut, U"Cut", 2, 0)
 		OPTION (U"at exactly these times")
 		OPTION (U"at nearest zero crossing")
 	OK
@@ -1420,9 +1420,9 @@ DIRECT (MODIFY_Sound_subtractMean) {
 }
 
 FORM (NEW_Sound_to_Manipulation, U"Sound: To Manipulation", U"Manipulation") {
-	POSITIVE4 (timeStep, U"Time step (s)", U"0.01")
-	POSITIVE4 (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
-	POSITIVE4 (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
+	POSITIVE (timeStep, U"Time step (s)", U"0.01")
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
+	POSITIVE (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
 	OK
 DO
 	if (maximumPitch <= minimumPitch) Melder_throw (U"The maximum pitch should be greater than the minimum pitch.");
@@ -1432,10 +1432,10 @@ DO
 }
 
 FORM (NEW_Sound_to_Cochleagram, U"Sound: To Cochleagram", nullptr) {
-	POSITIVE4 (timeStep, U"Time step (s)", U"0.01")
-	POSITIVE4 (frequencyResolution, U"Frequency resolution (Bark)", U"0.1")
-	POSITIVE4 (windowLength, U"Window length (s)", U"0.03")
-	REAL4 (forwardMaskingTime, U"Forward-masking time (s)", U"0.03")
+	POSITIVE (timeStep, U"Time step (s)", U"0.01")
+	POSITIVE (frequencyResolution, U"Frequency resolution (Bark)", U"0.1")
+	POSITIVE (windowLength, U"Window length (s)", U"0.03")
+	REAL (forwardMaskingTime, U"Forward-masking time (s)", U"0.03")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1445,14 +1445,14 @@ DO
 }
 
 FORM (NEW_Sound_to_Cochleagram_edb, U"Sound: To Cochleagram (De Boer, Meddis & Hewitt)", nullptr) {
-	POSITIVE4 (timeStep, U"Time step (s)", U"0.01")
-	POSITIVE4 (frequencyResolution, U"Frequency resolution (Bark)", U"0.1")
-	BOOLEAN4 (hasSynapse, U"Has synapse", true)
+	POSITIVE (timeStep, U"Time step (s)", U"0.01")
+	POSITIVE (frequencyResolution, U"Frequency resolution (Bark)", U"0.1")
+	BOOLEAN (hasSynapse, U"Has synapse", true)
 	LABEL (U"", U"Meddis synapse properties")
-	POSITIVE4 (replenishmentRate, U"   replenishment rate (/sec)", U"5.05")
-	POSITIVE4 (lossRate, U"   loss rate (/sec)", U"2500.0")
-	POSITIVE4 (returnRate, U"   return rate (/sec)", U"6580.0")
-	POSITIVE4 (reprocessingRate, U"   reprocessing rate (/sec)", U"66.31")
+	POSITIVE (replenishmentRate, U"   replenishment rate (/sec)", U"5.05")
+	POSITIVE (lossRate, U"   loss rate (/sec)", U"2500.0")
+	POSITIVE (returnRate, U"   return rate (/sec)", U"6580.0")
+	POSITIVE (reprocessingRate, U"   reprocessing rate (/sec)", U"66.31")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1462,11 +1462,11 @@ DO
 }
 
 FORM (NEW_Sound_to_Formant_burg, U"Sound: To Formant (Burg method)", U"Sound: To Formant (burg)...") {
-	REAL4 (timeStep, U"Time step (s)", U"0.0 (= auto)")
-	POSITIVE4 (maximumNumberOfFormants, U"Max. number of formants", U"5.0")
-	REAL4 (maximumFormant, U"Maximum formant (Hz)", U"5500.0 (= adult female)")
-	POSITIVE4 (windowLength, U"Window length (s)", U"0.025")
-	POSITIVE4 (preEmphasisFrom, U"Pre-emphasis from (Hz)", U"50.0")
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	POSITIVE (maximumNumberOfFormants, U"Max. number of formants", U"5.0")
+	REAL (maximumFormant, U"Maximum formant (Hz)", U"5500.0 (= adult female)")
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
+	POSITIVE (preEmphasisFrom, U"Pre-emphasis from (Hz)", U"50.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1476,11 +1476,11 @@ DO
 }
 
 FORM (NEW_Sound_to_Formant_keepAll, U"Sound: To Formant (keep all)", U"Sound: To Formant (keep all)...") {
-	REAL4 (timeStep, U"Time step (s)", U"0.0 (= auto)")
-	POSITIVE4 (maximumNumberOfFormants, U"Max. number of formants", U"5.0")
-	REAL4 (maximumFormant, U"Maximum formant (Hz)", U"5500.0 (= adult female)")
-	POSITIVE4 (windowLength, U"Window length (s)", U"0.025")
-	POSITIVE4 (preEmphasisFrom, U"Pre-emphasis from (Hz)", U"50.0")
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	POSITIVE (maximumNumberOfFormants, U"Max. number of formants", U"5.0")
+	REAL (maximumFormant, U"Maximum formant (Hz)", U"5500.0 (= adult female)")
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
+	POSITIVE (preEmphasisFrom, U"Pre-emphasis from (Hz)", U"50.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1490,11 +1490,11 @@ DO
 }
 
 FORM (NEW_Sound_to_Formant_willems, U"Sound: To Formant (split Levinson (Willems))", U"Sound: To Formant (sl)...") {
-	REAL4 (timeStep, U"Time step (s)", U"0.0 (= auto)")
-	POSITIVE4 (numberOfFormants, U"Number of formants", U"5.0")
-	REAL4 (maximumFormant, U"Maximum formant (Hz)", U"5500.0 (= adult female)")
-	POSITIVE4 (windowLength, U"Window length (s)", U"0.025")
-	POSITIVE4 (preEmphasisFrom, U"Pre-emphasis from (Hz)", U"50.0")
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	POSITIVE (numberOfFormants, U"Number of formants", U"5.0")
+	REAL (maximumFormant, U"Maximum formant (Hz)", U"5500.0 (= adult female)")
+	POSITIVE (windowLength, U"Window length (s)", U"0.025")
+	POSITIVE (preEmphasisFrom, U"Pre-emphasis from (Hz)", U"50.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1504,10 +1504,10 @@ DO
 }
 
 FORM (NEW_Sound_to_Harmonicity_ac, U"Sound: To Harmonicity (ac)", U"Sound: To Harmonicity (ac)...") {
-	POSITIVE4 (timeStep, U"Time step (s)", U"0.01")
-	POSITIVE4 (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
-	REAL4 (silenceThreshold, U"Silence threshold", U"0.1")
-	POSITIVE4 (periodsPerWindow, U"Periods per window", U"4.5")
+	POSITIVE (timeStep, U"Time step (s)", U"0.01")
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
+	REAL (silenceThreshold, U"Silence threshold", U"0.1")
+	POSITIVE (periodsPerWindow, U"Periods per window", U"4.5")
 	OK
 DO
 	if (periodsPerWindow < 3.0) Melder_throw (U"Number of periods per window must be at least 3.0.");
@@ -1518,10 +1518,10 @@ DO
 }
 
 FORM (NEW_Sound_to_Harmonicity_cc, U"Sound: To Harmonicity (cc)", U"Sound: To Harmonicity (cc)...") {
-	POSITIVE4 (timeStep, U"Time step (s)", U"0.01")
-	POSITIVE4 (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
-	REAL4 (silenceThreshold, U"Silence threshold", U"0.1")
-	POSITIVE4 (periodsPerWindow, U"Periods per window", U"4.5")
+	POSITIVE (timeStep, U"Time step (s)", U"0.01")
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
+	REAL (silenceThreshold, U"Silence threshold", U"0.1")
+	POSITIVE (periodsPerWindow, U"Periods per window", U"4.5")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1531,10 +1531,10 @@ DO
 }
 
 FORM (NEW_Sound_to_Harmonicity_gne, U"Sound: To Harmonicity (gne)", nullptr) {
-	POSITIVE4 (minimumFrequency, U"Minimum frequency (Hz)", U"500.0")
-	POSITIVE4 (maximumFrequency, U"Maximum frequency (Hz)", U"4500.0")
-	POSITIVE4 (bandwidth, U"Bandwidth (Hz)", U"1000.0")
-	POSITIVE4 (step, U"Step (Hz)", U"80.0")
+	POSITIVE (minimumFrequency, U"Minimum frequency (Hz)", U"500.0")
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"4500.0")
+	POSITIVE (bandwidth, U"Bandwidth (Hz)", U"1000.0")
+	POSITIVE (step, U"Step (Hz)", U"80.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1544,8 +1544,8 @@ DO
 }
 
 FORM (NEW_old_Sound_to_Intensity, U"Sound: To Intensity", U"Sound: To Intensity...") {
-	POSITIVE4 (minimumPitch, U"Minimum pitch (Hz)", U"100.0")
-	REAL4 (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"100.0")
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1555,9 +1555,9 @@ DO
 }
 
 FORM (NEW_Sound_to_Intensity, U"Sound: To Intensity", U"Sound: To Intensity...") {
-	POSITIVE4 (minimumPitch, U"Minimum pitch (Hz)", U"100.0")
-	REAL4 (timeStep, U"Time step (s)", U"0.0 (= auto)")
-	BOOLEAN4 (subtractMean, U"Subtract mean", true)
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"100.0")
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	BOOLEAN (subtractMean, U"Subtract mean", true)
 	OK
 DO_ALTERNATIVE (NEW_old_Sound_to_Intensity)
 	CONVERT_EACH (Sound)
@@ -1567,9 +1567,9 @@ DO_ALTERNATIVE (NEW_old_Sound_to_Intensity)
 }
 
 FORM (NEW_Sound_to_IntensityTier, U"Sound: To IntensityTier", nullptr) {
-	POSITIVE4 (minimumPitch, U"Minimum pitch (Hz)", U"100.0")
-	REAL4 (timeStep, U"Time step (s)", U"0.0 (= auto)")
-	BOOLEAN4 (subtractMean, U"Subtract mean", true)
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"100.0")
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	BOOLEAN (subtractMean, U"Subtract mean", true)
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1585,7 +1585,7 @@ DIRECT (NEW_Sound_to_IntervalTier) {
 }
 
 FORM (NEW_Sound_to_Ltas, U"Sound: To long-term average spectrum", nullptr) {
-	POSITIVE4 (bandwidth, U"Bandwidth (Hz)", U"100")
+	POSITIVE (bandwidth, U"Bandwidth (Hz)", U"100")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1594,13 +1594,13 @@ DO
 }
 
 FORM (NEW_Sound_to_Ltas_pitchCorrected, U"Sound: To Ltas (pitch-corrected)", U"Sound: To Ltas (pitch-corrected)...") {
-	POSITIVE4 (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
-	POSITIVE4 (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
-	POSITIVE4 (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
-	POSITIVE4 (bandwidth, U"Bandwidth (Hz)", U"100.0")
-	REAL4 (shortestPeriod, U"Shortest period (s)", U"0.0001")
-	REAL4 (longestPeriod, U"Longest period (s)", U"0.02")
-	POSITIVE4 (maximumPeriodFactor, U"Maximum period factor", U"1.3")
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
+	POSITIVE (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
+	POSITIVE (bandwidth, U"Bandwidth (Hz)", U"100.0")
+	REAL (shortestPeriod, U"Shortest period (s)", U"0.0001")
+	REAL (longestPeriod, U"Longest period (s)", U"0.02")
+	POSITIVE (maximumPeriodFactor, U"Maximum period factor", U"1.3")
 	OK
 DO
 	if (maximumPitch <= minimumPitch) Melder_throw (U"Your maximum pitch should be greater than your minimum pitch.");
@@ -1627,9 +1627,9 @@ DIRECT (NEW1_Sounds_to_ParamCurve) {
 END }
 
 FORM (NEW_Sound_to_Pitch, U"Sound: To Pitch", U"Sound: To Pitch...") {
-	REAL4 (timeStep, U"Time step (s)", U"0.0 (= auto)")
-	POSITIVE4 (pitchFloor, U"Pitch floor (Hz)", U"75.0")
-	POSITIVE4 (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	POSITIVE (pitchFloor, U"Pitch floor (Hz)", U"75.0")
+	POSITIVE (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1639,17 +1639,17 @@ DO
 
 FORM (NEW_Sound_to_Pitch_ac, U"Sound: To Pitch (ac)", U"Sound: To Pitch (ac)...") {
 	LABEL (U"", U"Finding the candidates")
-	REAL4 (timeStep, U"Time step (s)", U"0.0 (= auto)")
-	POSITIVE4 (pitchFloor, U"Pitch floor (Hz)", U"75.0")
-	NATURAL4 (maximumNumberOfCandidates, U"Max. number of candidates", U"15")
-	BOOLEAN4 (veryAccurate, U"Very accurate", false)
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	POSITIVE (pitchFloor, U"Pitch floor (Hz)", U"75.0")
+	NATURAL (maximumNumberOfCandidates, U"Max. number of candidates", U"15")
+	BOOLEAN (veryAccurate, U"Very accurate", false)
 	LABEL (U"", U"Finding a path")
-	REAL4 (silenceThreshold, U"Silence threshold", U"0.03")
-	REAL4 (voicingThreshold, U"Voicing threshold", U"0.45")
-	REAL4 (octaveCost, U"Octave cost", U"0.01")
-	REAL4 (octaveJumpCost, U"Octave-jump cost", U"0.35")
-	REAL4 (voicedUnvoicedCost, U"Voiced / unvoiced cost", U"0.14")
-	POSITIVE4 (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
+	REAL (silenceThreshold, U"Silence threshold", U"0.03")
+	REAL (voicingThreshold, U"Voicing threshold", U"0.45")
+	REAL (octaveCost, U"Octave cost", U"0.01")
+	REAL (octaveJumpCost, U"Octave-jump cost", U"0.35")
+	REAL (voicedUnvoicedCost, U"Voiced / unvoiced cost", U"0.14")
+	POSITIVE (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
 	OK
 DO
 	if (maximumNumberOfCandidates <= 1)
@@ -1663,17 +1663,17 @@ DO
 
 FORM (NEW_Sound_to_Pitch_cc, U"Sound: To Pitch (cc)", U"Sound: To Pitch (cc)...") {
 	LABEL (U"", U"Finding the candidates")
-	REAL4 (timeStep, U"Time step (s)", U"0.0 (= auto)")
-	POSITIVE4 (pitchFloor, U"Pitch floor (Hz)", U"75.0")
-	NATURAL4 (maximumNumberOfCandidates, U"Max. number of candidates", U"15")
-	BOOLEAN4 (veryAccurate, U"Very accurate", false)
+	REAL (timeStep, U"Time step (s)", U"0.0 (= auto)")
+	POSITIVE (pitchFloor, U"Pitch floor (Hz)", U"75.0")
+	NATURAL (maximumNumberOfCandidates, U"Max. number of candidates", U"15")
+	BOOLEAN (veryAccurate, U"Very accurate", false)
 	LABEL (U"", U"Finding a path")
-	REAL4 (silenceThreshold, U"Silence threshold", U"0.03")
-	REAL4 (voicingThreshold, U"Voicing threshold", U"0.45")
-	REAL4 (octaveCost, U"Octave cost", U"0.01")
-	REAL4 (octaveJumpCost, U"Octave-jump cost", U"0.35")
-	REAL4 (voicedUnvoicedCost, U"Voiced / unvoiced cost", U"0.14")
-	POSITIVE4 (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
+	REAL (silenceThreshold, U"Silence threshold", U"0.03")
+	REAL (voicingThreshold, U"Voicing threshold", U"0.45")
+	REAL (octaveCost, U"Octave cost", U"0.01")
+	REAL (octaveJumpCost, U"Octave-jump cost", U"0.35")
+	REAL (voicedUnvoicedCost, U"Voiced / unvoiced cost", U"0.14")
+	POSITIVE (pitchCeiling, U"Pitch ceiling (Hz)", U"600.0")
 	OK
 DO
 	long maxnCandidates = GET_INTEGER (U"Max. number of candidates");
@@ -1686,10 +1686,10 @@ DO
 }
 
 FORM (NEW_Sound_to_PointProcess_extrema, U"Sound: To PointProcess (extrema)", nullptr) {
-	CHANNEL4 (channel, U"Channel (number, Left, or Right)", U"1")
-	BOOLEAN4 (includeMaxima, U"Include maxima", true)
-	BOOLEAN4 (includeMinima, U"Include minima", false)
-	RADIO4x (interpolation, U"Interpolation", 4, 0)
+	CHANNEL (channel, U"Channel (number, Left, or Right)", U"1")
+	BOOLEAN (includeMaxima, U"Include maxima", true)
+	BOOLEAN (includeMinima, U"Include minima", false)
+	RADIOx (interpolation, U"Interpolation", 4, 0)
 		RADIOBUTTON (U"None")
 		RADIOBUTTON (U"Parabolic")
 		RADIOBUTTON (U"Cubic")
@@ -1704,8 +1704,8 @@ DO
 }
 
 FORM (NEW_Sound_to_PointProcess_periodic_cc, U"Sound: To PointProcess (periodic, cc)", U"Sound: To PointProcess (periodic, cc)...") {
-	POSITIVE4 (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
-	POSITIVE4 (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
+	POSITIVE (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
 	OK
 DO
 	if (maximumPitch <= minimumPitch)
@@ -1716,10 +1716,10 @@ DO
 }
 
 FORM (NEW_Sound_to_PointProcess_periodic_peaks, U"Sound: To PointProcess (periodic, peaks)", U"Sound: To PointProcess (periodic, peaks)...") {
-	POSITIVE4 (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
-	POSITIVE4 (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
-	BOOLEAN4 (includeMaxima, U"Include maxima", true)
-	BOOLEAN4 (includeMinima, U"Include minima", false)
+	POSITIVE (minimumPitch, U"Minimum pitch (Hz)", U"75.0")
+	POSITIVE (maximumPitch, U"Maximum pitch (Hz)", U"600.0")
+	BOOLEAN (includeMaxima, U"Include maxima", true)
+	BOOLEAN (includeMinima, U"Include minima", false)
 	OK
 DO
 	if (maximumPitch <= minimumPitch)
@@ -1731,9 +1731,9 @@ DO
 }
 
 FORM (NEW_Sound_to_PointProcess_zeroes, U"Get zeroes", nullptr) {
-	CHANNEL4 (channel, U"Channel (number, Left, or Right)", U"1")
-	BOOLEAN4 (includeRaisers, U"Include raisers", true)
-	BOOLEAN4 (includeFallers, U"Include fallers", false)
+	CHANNEL (channel, U"Channel (number, Left, or Right)", U"1")
+	BOOLEAN (includeRaisers, U"Include raisers", true)
+	BOOLEAN (includeFallers, U"Include fallers", false)
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1743,11 +1743,11 @@ DO
 }
 
 FORM (NEW_Sound_to_Spectrogram, U"Sound: To Spectrogram", U"Sound: To Spectrogram...") {
-	POSITIVE4 (windowLength, U"Window length (s)", U"0.005")
-	POSITIVE4 (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
-	POSITIVE4 (timeStep, U"Time step (s)", U"0.002")
-	POSITIVE4 (frequencyStep, U"Frequency step (Hz)", U"20.0")
-	RADIO_ENUM4 (windowShape, U"Window shape", kSound_to_Spectrogram_windowShape, DEFAULT)
+	POSITIVE (windowLength, U"Window length (s)", U"0.005")
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
+	POSITIVE (timeStep, U"Time step (s)", U"0.002")
+	POSITIVE (frequencyStep, U"Frequency step (Hz)", U"20.0")
+	RADIO_ENUM (windowShape, U"Window shape", kSound_to_Spectrogram_windowShape, DEFAULT)
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1758,7 +1758,7 @@ DO
 }
 
 FORM (NEW_Sound_to_Spectrum, U"Sound: To Spectrum", U"Sound: To Spectrum...") {
-	BOOLEAN4 (fast, U"Fast", true)
+	BOOLEAN (fast, U"Fast", true)
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1779,8 +1779,8 @@ DIRECT (NEW_Sound_to_Spectrum_fft) {
 }
 
 FORM (NEW_Sound_to_TextGrid, U"Sound: To TextGrid", U"Sound: To TextGrid...") {
-	SENTENCE4 (allTierNames, U"All tier names", U"Mary John bell")
-	SENTENCE4 (whichOfTheseArePointTiers, U"Which of these are point tiers?", U"bell")
+	SENTENCE (allTierNames, U"All tier names", U"Mary John bell")
+	SENTENCE (whichOfTheseArePointTiers, U"Which of these are point tiers?", U"bell")
 	OK
 DO
 	CONVERT_EACH (Sound)
@@ -1795,8 +1795,8 @@ DIRECT (NEW_Sound_to_TextTier) {
 }
 
 FORM (PREFS_SoundInputPrefs, U"Sound recording preferences", U"SoundRecorder") {
-	NATURAL4 (bufferSize, U"Buffer size (MB)", U"60")
-	OPTIONMENU_ENUM4 (inputSoundSystem, U"Input sound system", kMelder_inputSoundSystem, DEFAULT)
+	NATURAL (bufferSize, U"Buffer size (MB)", U"60")
+	OPTIONMENU_ENUM (inputSoundSystem, U"Input sound system", kMelder_inputSoundSystem, DEFAULT)
 OK
 	SET_INTEGER (U"Buffer size", SoundRecorder_getBufferSizePref_MB ())
 	SET_ENUM (U"Input sound system", kMelder_inputSoundSystem, MelderAudio_getInputSoundSystem())
@@ -1810,12 +1810,12 @@ FORM (PREFS_SoundOutputPrefs, U"Sound playing preferences", nullptr) {
 	LABEL (U"", U"The following determines how sounds are played.")
 	LABEL (U"", U"Between parentheses, you find what you can do simultaneously.")
 	LABEL (U"", U"Decrease asynchronicity if sound plays with discontinuities.")
-	OPTIONMENU_ENUM4 (maximumAsynchronicity, U"Maximum asynchronicity", kMelder_asynchronicityLevel, DEFAULT)
+	OPTIONMENU_ENUM (maximumAsynchronicity, U"Maximum asynchronicity", kMelder_asynchronicityLevel, DEFAULT)
 	#define xstr(s) str(s)
 	#define str(s) #s
-	REAL4 (silenceBefore, U"Silence before (s)", U"" xstr (kMelderAudio_outputSilenceBefore_DEFAULT))
-	REAL4 (silenceAfter, U"Silence after (s)", U"" xstr (kMelderAudio_outputSilenceAfter_DEFAULT))
-	OPTIONMENU_ENUM4 (outputSoundSystem, U"Output sound system", kMelder_outputSoundSystem, DEFAULT)
+	REAL (silenceBefore, U"Silence before (s)", U"" xstr (kMelderAudio_outputSilenceBefore_DEFAULT))
+	REAL (silenceAfter, U"Silence after (s)", U"" xstr (kMelderAudio_outputSilenceAfter_DEFAULT))
+	OPTIONMENU_ENUM (outputSoundSystem, U"Output sound system", kMelder_outputSoundSystem, DEFAULT)
 OK
 	SET_ENUM (U"Maximum asynchronicity", kMelder_asynchronicityLevel, MelderAudio_getOutputMaximumAsynchronicity ())
 	SET_REAL (U"Silence before", MelderAudio_getOutputSilenceBefore ())
@@ -1998,13 +1998,13 @@ DIRECT (HELP_FilteringTutorial) {
 
 /***** file recognizers *****/
 
-static autoDaata macSoundOrEmptyFileRecognizer (int nread, const char * /* header */, MelderFile file) {
+static autoDaata macSoundOrEmptyFileRecognizer (integer nread, const char * /* header */, MelderFile file) {
 	/***** No data in file? This may be a Macintosh sound file with only a resource fork. *****/
 	if (nread > 0) return autoDaata ();
 	Melder_throw (U"File ", file, U" contains no audio data.");   // !!!
 }
 
-static autoDaata soundFileRecognizer (int nread, const char *header, MelderFile file) {
+static autoDaata soundFileRecognizer (integer nread, const char *header, MelderFile file) {
 	if (nread < 16) return autoDaata ();
 	if (strnequ (header, "FORM", 4) && strnequ (header + 8, "AIF", 3)) return Sound_readFromSoundFile (file);
 	if (strnequ (header, "RIFF", 4) && (strnequ (header + 8, "WAVE", 4) || strnequ (header + 8, "CDDA", 4))) return Sound_readFromSoundFile (file);
@@ -2017,7 +2017,7 @@ static autoDaata soundFileRecognizer (int nread, const char *header, MelderFile
 	return autoDaata ();
 }
 
-static autoDaata movieFileRecognizer (int nread, const char * /* header */, MelderFile file) {
+static autoDaata movieFileRecognizer (integer nread, const char * /* header */, MelderFile file) {
 	const char32 *fileName = MelderFile_name (file);
 	/*Melder_casual ("%d %d %d %d %d %d %d %d %d %d", header [0],
 		header [1], header [2], header [3],
@@ -2031,19 +2031,19 @@ static autoDaata movieFileRecognizer (int nread, const char * /* header */, Meld
 	return autoDaata ();
 }
 
-static autoDaata sesamFileRecognizer (int nread, const char * /* header */, MelderFile file) {
+static autoDaata sesamFileRecognizer (integer nread, const char * /* header */, MelderFile file) {
 	const char32 *fileName = MelderFile_name (file);
 	if (nread < 512 || (! Melder_stringMatchesCriterion (fileName, kMelder_string::ENDS_WITH, U".sdf") &&
 	                    ! Melder_stringMatchesCriterion (fileName, kMelder_string::ENDS_WITH, U".SDF"))) return autoDaata ();
 	return Sound_readFromSesamFile (file);
 }
 
-static autoDaata bellLabsFileRecognizer (int nread, const char *header, MelderFile file) {
+static autoDaata bellLabsFileRecognizer (integer nread, const char *header, MelderFile file) {
 	if (nread < 16 || ! strnequ (& header [0], "SIG\n", 4)) return autoDaata ();
 	return Sound_readFromBellLabsFile (file);
 }
 
-static autoDaata kayFileRecognizer (int nread, const char *header, MelderFile file) {
+static autoDaata kayFileRecognizer (integer nread, const char *header, MelderFile file) {
 	if (nread <= 12 || ! strnequ (& header [0], "FORMDS16", 8)) return autoDaata ();
 	return Sound_readFromKayFile (file);
 }
@@ -2062,7 +2062,7 @@ static int recordProc (double duration) {
 }
 static int recordFromFileProc (MelderFile file) {
 	if (last == melderSoundFromFile.get()) last = nullptr;
-	Melder_warningOff ();   // like "misssing samples"
+	Melder_warningOff ();   // like "missing samples"
 	melderSoundFromFile = Data_readFromFile (file). static_cast_move<structSound>();
 	Melder_warningOn ();
 	if (! melderSoundFromFile) return 0;
@@ -2259,6 +2259,7 @@ void praat_Sound_init () {
 		praat_addAction1 (classSound, 1, U"-- get time discretization --", nullptr, 2, nullptr);
 		praat_addAction1 (classSound, 1, U"Get time from sample number...", nullptr, 2, REAL_Sound_getTimeFromIndex);
 		praat_addAction1 (classSound, 1,   U"Get time from index...", U"*Get time from sample number...", praat_DEPTH_2 | praat_DEPRECATED_2004, REAL_Sound_getTimeFromIndex);
+		praat_addAction1 (classSound, 1, U"Get sample times", nullptr, 2, NUMVEC_Sound_getSampleTimes);
 		praat_addAction1 (classSound, 1, U"Get sample number from time...", nullptr, 2, REAL_Sound_getIndexFromTime);
 		praat_addAction1 (classSound, 1,   U"Get index from time...", U"*Get sample number from time...", praat_DEPTH_2 | praat_DEPRECATED_2004, REAL_Sound_getIndexFromTime);
 		praat_addAction1 (classSound, 1, U"-- get content --", nullptr, 1, nullptr);
diff --git a/fon/praat_TextGrid_init.cpp b/fon/praat_TextGrid_init.cpp
index 5e6c631..b6abdf8 100644
--- a/fon/praat_TextGrid_init.cpp
+++ b/fon/praat_TextGrid_init.cpp
@@ -50,7 +50,7 @@ DIRECT (NEW1_AnyTier_into_TextGrid) {
 // MARK: - INTERVALTIER
 
 FORM (NEW_IntervalTier_downto_TableOfReal, U"IntervalTier: Down to TableOfReal", nullptr) {
-	SENTENCE4 (label, U"Label", U"")
+	SENTENCE (label, U"Label", U"")
 	OK
 DO
 	CONVERT_EACH (IntervalTier)
@@ -65,7 +65,7 @@ DIRECT (NEW_IntervalTier_downto_TableOfReal_any) {
 }
 
 FORM (NEW_IntervalTier_getCentrePoints, U"IntervalTier: Get centre points", nullptr) {
-	SENTENCE4 (text, U"Text", U"")
+	SENTENCE (text, U"Text", U"")
 	OK
 DO
 	CONVERT_EACH (IntervalTier)
@@ -74,7 +74,7 @@ DO
 }
 
 FORM (NEW_IntervalTier_getEndPoints, U"IntervalTier: Get end points", nullptr) {
-	SENTENCE4 (text, U"Text", U"")
+	SENTENCE (text, U"Text", U"")
 	OK
 DO
 	CONVERT_EACH (IntervalTier)
@@ -83,7 +83,7 @@ DO
 }
 
 FORM (NEW_IntervalTier_getStartingPoints, U"IntervalTier: Get starting points", nullptr) {
-	SENTENCE4 (text, U"Text", U"")
+	SENTENCE (text, U"Text", U"")
 	OK
 DO
 	CONVERT_EACH (IntervalTier)
@@ -104,7 +104,7 @@ FORM_SAVE (SAVE_IntervalTier_writeToXwaves, U"Xwaves label file", nullptr, nullp
 // MARK: - INTERVALTIER & POINTPROCESS
 
 FORM (NEW1_IntervalTier_PointProcess_startToCentre, U"From start to centre", U"IntervalTier & PointProcess: Start to centre...") {
-	REALVAR (phase, U"Phase (0-1)", U"0.5")
+	REAL (phase, U"Phase (0-1)", U"0.5")
 	OK
 DO
 	CONVERT_TWO (IntervalTier, PointProcess)
@@ -113,7 +113,7 @@ DO
 }
 
 FORM (NEW1_IntervalTier_PointProcess_endToCentre, U"From end to centre", U"IntervalTier & PointProcess: End to centre...") {
-	REALVAR (phase, U"Phase (0-1)", U"0.5")
+	REAL (phase, U"Phase (0-1)", U"0.5")
 	OK
 DO
 	CONVERT_TWO (IntervalTier, PointProcess)
@@ -139,14 +139,14 @@ DIRECT (HINT_Label_Sound_to_TextGrid) {
 // MARK: - PITCH & TEXTGRID
 
 FORM (GRAPHICS_TextGrid_Pitch_draw, U"TextGrid & Pitch: Draw", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
-	POSITIVEVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	INTEGER4 (fontSize, U"Font size (points)", U"18")
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	OPTIONMENU4x (textAlignment, U"Text alignment", 2, 0) OPTION (U"Left") OPTION (U"Centre") OPTION (U"Right")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
+	POSITIVE (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	INTEGER (fontSize, U"Font size (points)", U"18")
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	OPTIONMENUx (textAlignment, U"Text alignment", 2, 0) OPTION (U"Left") OPTION (U"Centre") OPTION (U"Right")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -156,14 +156,14 @@ DO
 }
 
 FORM (GRAPHICS_TextGrid_Pitch_drawErb, U"TextGrid & Pitch: Draw erb", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (ERB)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (ERB)", U"10.0")
-	INTEGER4 (fontSize, U"Font size (points)", U"18")
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	OPTIONMENU4x (textAlignment, U"Text alignment", 2, 0) OPTION (U"Left") OPTION (U"Centre") OPTION (U"Right")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (ERB)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (ERB)", U"10.0")
+	INTEGER (fontSize, U"Font size (points)", U"18")
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	OPTIONMENUx (textAlignment, U"Text alignment", 2, 0) OPTION (U"Left") OPTION (U"Centre") OPTION (U"Right")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -173,14 +173,14 @@ DO
 }
 
 FORM (GRAPHICS_TextGrid_Pitch_drawLogarithmic, U"TextGrid & Pitch: Draw logarithmic", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	POSITIVEVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
-	POSITIVEVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	INTEGER4 (fontSize, U"Font size (points)", U"18")
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	OPTIONMENU4x (textAlignment, U"Text alignment", 2, 0) OPTION (U"Left") OPTION (U"Centre") OPTION (U"Right")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	POSITIVE (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
+	POSITIVE (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	INTEGER (fontSize, U"Font size (points)", U"18")
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	OPTIONMENUx (textAlignment, U"Text alignment", 2, 0) OPTION (U"Left") OPTION (U"Centre") OPTION (U"Right")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -190,14 +190,14 @@ DO
 }
 
 FORM (GRAPHICS_TextGrid_Pitch_drawMel, U"TextGrid & Pitch: Draw mel", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (mel)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (mel)", U"500.0")
-	INTEGER4 (fontSize, U"Font size (points)", U"18")
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	OPTIONMENU4x (textAlignment, U"Text alignment", 2, 0) OPTION (U"Left") OPTION (U"Centre") OPTION (U"Right")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (mel)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (mel)", U"500.0")
+	INTEGER (fontSize, U"Font size (points)", U"18")
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	OPTIONMENUx (textAlignment, U"Text alignment", 2, 0) OPTION (U"Left") OPTION (U"Centre") OPTION (U"Right")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -207,15 +207,15 @@ DO
 }
 
 FORM (GRAPHICS_TextGrid_Pitch_drawSemitones, U"TextGrid & Pitch: Draw semitones", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
 	LABEL (U"", U"Range in semitones re 100 hertz:")
-	REALVAR (fromFrequency, U"left Frequency range (st)", U"-12.0")
-	REALVAR (toFrequency, U"right Frequency range (st)", U"30.0")
-	INTEGER4 (fontSize, U"Font size (points)", U"18")
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	OPTIONMENU4x (textAlignment, U"Text alignment", 2, 0) OPTION (U"Left") OPTION (U"Centre") OPTION (U"Right")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (st)", U"-12.0")
+	REAL (toFrequency, U"right Frequency range (st)", U"30.0")
+	INTEGER (fontSize, U"Font size (points)", U"18")
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	OPTIONMENUx (textAlignment, U"Text alignment", 2, 0) OPTION (U"Left") OPTION (U"Centre") OPTION (U"Right")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -226,11 +226,11 @@ DO
 
 FORM (GRAPHICS_TextGrid_Pitch_drawSeparately, U"TextGrid & Pitch: Draw separately", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
-	REALVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
+	REAL (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -241,11 +241,11 @@ DO
 
 FORM (GRAPHICS_TextGrid_Pitch_drawSeparatelyErb, U"TextGrid & Pitch: Draw separately erb", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (ERB)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (ERB)", U"10.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (ERB)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (ERB)", U"10.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -256,11 +256,11 @@ DO
 
 FORM (GRAPHICS_TextGrid_Pitch_drawSeparatelyLogarithmic, U"TextGrid & Pitch: Draw separately logarithmic", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	POSITIVEVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
-	POSITIVEVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	POSITIVE (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
+	POSITIVE (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -271,11 +271,11 @@ DO
 
 FORM (GRAPHICS_TextGrid_Pitch_drawSeparatelyMel, U"TextGrid & Pitch: Draw separately mel", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (mel)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (mel)", U"500.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (mel)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (mel)", U"500.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -287,11 +287,11 @@ DO
 FORM (GRAPHICS_TextGrid_Pitch_drawSeparatelySemitones, U"TextGrid & Pitch: Draw separately semitones", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
 	LABEL (U"", U"Range in semitones re 100 hertz:")
-	REALVAR (fromFrequency, U"left Frequency range (st)", U"-12.0")
-	REALVAR (toFrequency, U"right Frequency range (st)", U"30.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (st)", U"-12.0")
+	REAL (toFrequency, U"right Frequency range (st)", U"30.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -301,13 +301,13 @@ DO
 }
 
 FORM (GRAPHICS_TextGrid_Pitch_speckle, U"TextGrid & Pitch: Speckle", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
-	POSITIVEVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
+	POSITIVE (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -317,13 +317,13 @@ DO
 }
 
 FORM (GRAPHICS_TextGrid_Pitch_speckleErb, U"TextGrid & Pitch: Speckle erb", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (ERB)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (ERB)", U"10.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (ERB)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (ERB)", U"10.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -333,13 +333,13 @@ DO
 }
 
 FORM (GRAPHICS_TextGrid_Pitch_speckleLogarithmic, U"TextGrid & Pitch: Speckle logarithmic", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	POSITIVEVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
-	POSITIVEVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	POSITIVE (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
+	POSITIVE (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -349,13 +349,13 @@ DO
 }
 
 FORM (GRAPHICS_TextGrid_Pitch_speckleMel, U"TextGrid & Pitch: Speckle mel", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (mel)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (mel)", U"500.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (mel)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (mel)", U"500.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -365,14 +365,14 @@ DO
 }
 
 FORM (GRAPHICS_TextGrid_Pitch_speckleSemitones, U"TextGrid & Pitch: Speckle semitones", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
 	praat_TimeFunction_RANGE (fromTime, toTime)
 	LABEL (U"", U"Range in semitones re 100 hertz:")
-	REALVAR (fromFrequency, U"left Frequency range (st)", U"-12.0")
-	REALVAR (toFrequency, U"right Frequency range (st)", U"30.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (st)", U"-12.0")
+	REAL (toFrequency, U"right Frequency range (st)", U"30.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -383,11 +383,11 @@ DO
 
 FORM (GRAPHICS_TextGrid_Pitch_speckleSeparately, U"TextGrid & Pitch: Speckle separately", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
-	REALVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"0.0")
+	REAL (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -398,11 +398,11 @@ DO
 
 FORM (GRAPHICS_TextGrid_Pitch_speckleSeparatelyErb, U"TextGrid & Pitch: Speckle separately erb", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (ERB)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (ERB)", U"10.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (ERB)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (ERB)", U"10.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -413,11 +413,11 @@ DO
 
 FORM (GRAPHICS_TextGrid_Pitch_speckleSeparatelyLogarithmic, U"TextGrid & Pitch: Speckle separately logarithmic", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	POSITIVEVAR (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
-	POSITIVEVAR (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	POSITIVE (fromFrequency, STRING_FROM_FREQUENCY_HZ, U"50.0")
+	POSITIVE (toFrequency, STRING_TO_FREQUENCY_HZ, U"500.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -428,11 +428,11 @@ DO
 
 FORM (GRAPHICS_TextGrid_Pitch_speckleSeparatelyMel, U"TextGrid & Pitch: Speckle separately mel", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (mel)", U"0.0")
-	REALVAR (toFrequency, U"right Frequency range (mel)", U"500.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (mel)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (mel)", U"500.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -444,11 +444,11 @@ DO
 FORM (GRAPHICS_TextGrid_Pitch_speckleSeparatelySemitones, U"TextGrid & Pitch: Speckle separately semitones", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
 	LABEL (U"", U"Range in semitones re 100 hertz:")
-	REALVAR (fromFrequency, U"left Frequency range (st)", U"-12.0")
-	REALVAR (toFrequency, U"right Frequency range (st)", U"30.0")
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (st)", U"-12.0")
+	REAL (toFrequency, U"right Frequency range (st)", U"30.0")
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Pitch)
@@ -460,7 +460,7 @@ DO
 // MARK: - PITCH & TEXTTIER
 
 FORM (NEW1_Pitch_TextTier_to_PitchTier, U"Pitch & TextTier to PitchTier", U"Pitch & TextTier: To PitchTier...") {
-	RADIO4x (unvoicedStrategy, U"Unvoiced strategy", 3, 0)
+	RADIOx (unvoicedStrategy, U"Unvoiced strategy", 3, 0)
 		RADIOBUTTON (U"Zero")
 		RADIOBUTTON (U"Error")
 		RADIOBUTTON (U"Interpolate")
@@ -475,9 +475,9 @@ DO
 
 FORM (GRAPHICS_TextGrid_Sound_draw, U"TextGrid & Sound: Draw...", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_TWO (TextGrid, Sound)
@@ -486,8 +486,8 @@ DO
 }
 
 FORM (NEW1_TextGrid_Sound_extractAllIntervals, U"TextGrid & Sound: Extract all intervals", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	BOOLEAN4 (preserveTimes, U"Preserve times", false)
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
+	BOOLEAN (preserveTimes, U"Preserve times", false)
 	OK
 DO
 	CONVERT_TWO (TextGrid, Sound)
@@ -497,8 +497,8 @@ DO
 }
 
 FORM (NEW1_TextGrid_Sound_extractNonemptyIntervals, U"TextGrid & Sound: Extract non-empty intervals", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	BOOLEAN4 (preserveTimes, U"Preserve times", false)
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
+	BOOLEAN (preserveTimes, U"Preserve times", false)
 	OK
 DO
 	CONVERT_TWO (TextGrid, Sound)
@@ -508,9 +508,9 @@ DO
 }
 
 FORM (NEW1_TextGrid_Sound_extractIntervals, U"TextGrid & Sound: Extract intervals", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	BOOLEAN4 (preserveTimes, U"Preserve times", false)
-	SENTENCE4 (labelText, U"Label text", U"")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
+	BOOLEAN (preserveTimes, U"Preserve times", false)
+	SENTENCE (labelText, U"Label text", U"")
 	OK
 DO
 	CONVERT_TWO (TextGrid, Sound)
@@ -521,10 +521,10 @@ DO
 }
 
 FORM (NEW1_TextGrid_Sound_extractIntervalsWhere, U"TextGrid & Sound: Extract intervals", nullptr) {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	BOOLEAN4 (preserveTimes, U"Preserve times", false)
-	OPTIONMENU_ENUM4 (extractEveryIntervalWhoseLabel___, U"Extract every interval whose label...", kMelder_string, DEFAULT)
-	SENTENCE4 (__theText, U"...the text", U"")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
+	BOOLEAN (preserveTimes, U"Preserve times", false)
+	OPTIONMENU_ENUM (extractEveryIntervalWhoseLabel___, U"Extract every interval whose label...", kMelder_string, DEFAULT)
+	SENTENCE (__theText, U"...the text", U"")
 	OK
 DO
 	CONVERT_TWO (TextGrid, Sound)
@@ -551,7 +551,7 @@ DIRECT (MODIFY_TextGrid_Sound_cloneTimeDomain) {
 // MARK: - SPELLINGCHECKER
 
 FORM (MODIFY_SpellingChecker_addNewWord, U"Add word to user dictionary", U"SpellingChecker") {
-	SENTENCE4 (newWord, U"New word", U"")
+	SENTENCE (newWord, U"New word", U"")
 	OK
 DO
 	MODIFY_EACH (SpellingChecker)
@@ -561,21 +561,21 @@ DO
 
 FORM (WINDOW_SpellingChecker_viewAndEdit, U"Edit spelling checker", U"SpellingChecker") {
 	LABEL (U"", U"-- Syntax --")
-	SENTENCE4 (forbiddenStrings, U"Forbidden strings", U"")
-	BOOLEAN4 (checkMatchingParentheses, U"Check matching parentheses", false)
-	SENTENCE4 (separatingCharacters, U"Separating characters", U"")
-	BOOLEAN4 (allowAllParenthesized, U"Allow all parenthesized", false)
+	SENTENCE (forbiddenStrings, U"Forbidden strings", U"")
+	BOOLEAN (checkMatchingParentheses, U"Check matching parentheses", false)
+	SENTENCE (separatingCharacters, U"Separating characters", U"")
+	BOOLEAN (allowAllParenthesized, U"Allow all parenthesized", false)
 	LABEL (U"", U"-- Capitals --")
-	BOOLEAN4 (allowAllNames, U"Allow all names", false)
-	SENTENCE4 (namePrefixes, U"Name prefixes", U"")
-	BOOLEAN4 (allowAllAbbreviations, U"Allow all abbreviations", false)
+	BOOLEAN (allowAllNames, U"Allow all names", false)
+	SENTENCE (namePrefixes, U"Name prefixes", U"")
+	BOOLEAN (allowAllAbbreviations, U"Allow all abbreviations", false)
 	LABEL (U"", U"-- Capitalization --")
-	BOOLEAN4 (allowCapsSentenceInitially, U"Allow caps sentence-initially", false)
-	BOOLEAN4 (allowCapsAfterColon, U"Allow caps after colon", false)
+	BOOLEAN (allowCapsSentenceInitially, U"Allow caps sentence-initially", false)
+	BOOLEAN (allowCapsAfterColon, U"Allow caps after colon", false)
 	LABEL (U"", U"-- Word parts --")
-	SENTENCE4 (allowAllWordsContaining, U"Allow all words containing", U"")
-	SENTENCE4 (allowAllWordsStartingWith, U"Allow all words starting with", U"")
-	SENTENCE4 (allowAllWordsEndingIn, U"Allow all words ending in", U"")
+	SENTENCE (allowAllWordsContaining, U"Allow all words containing", U"")
+	SENTENCE (allowAllWordsStartingWith, U"Allow all words starting with", U"")
+	SENTENCE (allowAllWordsEndingIn, U"Allow all words ending in", U"")
 OK
 	FIND_ONE (SpellingChecker)
 		SET_STRING (U"Forbidden strings", my forbiddenStrings)
@@ -620,7 +620,7 @@ DIRECT (NEW_SpellingChecker_extractUserDictionary) {
 }
 
 FORM (BOOLEAN_SpellingChecker_isWordAllowed, U"Is word allowed?", U"SpellingChecker") {
-	SENTENCE4 (word, U"Word", U"")
+	SENTENCE (word, U"Word", U"")
 	OK
 DO
 	NUMBER_ONE (SpellingChecker)
@@ -630,8 +630,8 @@ DO
 
 FORM (STRING_SpellingChecker_nextNotAllowedWord, U"Next not allowed word?", U"SpellingChecker") {
 	LABEL (U"", U"Sentence:")
-	TEXTFIELD4 (sentence, U"sentence", U"")
-	INTEGER4 (startingCharacter, U"Starting character", U"0")
+	TEXTFIELD (sentence, U"sentence", U"")
+	INTEGER (startingCharacter, U"Starting character", U"0")
 	OK
 DO
 	STRING_ONE (SpellingChecker)
@@ -711,7 +711,7 @@ DIRECT (WINDOW_TextGrid_viewAndEdit) {
 }
 
 FORM (WINDOW_TextGrid_viewAndEditWithCallback, U"TextGrid: View & Edit with callback", nullptr) {
-	SENTENCE4 (callbackText, U"Callback text", U"r1")
+	SENTENCE (callbackText, U"Callback text", U"r1")
 	OK
 DO
 	if (theCurrentPraatApplication -> batch) Melder_throw (U"Cannot view or edit a TextGrid from batch.");
@@ -787,9 +787,9 @@ DIRECT (HINT_TextGrid_Sound_viewAndEdit) {
 
 FORM (GRAPHICS_TextGrid_draw, U"TextGrid: Draw", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	BOOLEAN4 (showBoundaries, U"Show boundaries", true)
-	BOOLEAN4 (useTextStyles, U"Use text styles", true)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	BOOLEAN (showBoundaries, U"Show boundaries", true)
+	BOOLEAN (useTextStyles, U"Use text styles", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (TextGrid)
@@ -812,10 +812,10 @@ DIRECT (HINT_TextGrid_Pitch_draw) {
 // MARK: Tabulate
 
 FORM (LIST_TextGrid_list, U"TextGrid: List", nullptr) {
-	BOOLEAN4 (includeLineNumber, U"Include line number", false)
-	NATURAL4 (timeDecimals, U"Time decimals", U"6")
-	BOOLEAN4 (includeTierNames, U"Include tier names", true)
-	BOOLEAN4 (includeEmptyIntervals, U"Include empty intervals", false)
+	BOOLEAN (includeLineNumber, U"Include line number", false)
+	NATURAL (timeDecimals, U"Time decimals", U"6")
+	BOOLEAN (includeTierNames, U"Include tier names", true)
+	BOOLEAN (includeEmptyIntervals, U"Include empty intervals", false)
 	OK
 DO
 	INFO_ONE (TextGrid)
@@ -824,10 +824,10 @@ DO
 }
 
 FORM (NEW_TextGrid_downto_Table, U"TextGrid: Down to Table", nullptr) {
-	BOOLEAN4 (includeLineNumber, U"Include line number", false)
-	NATURAL4 (timeDecimals, U"Time decimals", U"6")
-	BOOLEAN4 (includeTierNames, U"Include tier names", true)
-	BOOLEAN4 (includeEmptyIntervals, U"Include empty intervals", false)
+	BOOLEAN (includeLineNumber, U"Include line number", false)
+	NATURAL (timeDecimals, U"Time decimals", U"6")
+	BOOLEAN (includeTierNames, U"Include tier names", true)
+	BOOLEAN (includeEmptyIntervals, U"Include empty intervals", false)
 	OK
 DO
 	CONVERT_EACH (TextGrid)
@@ -856,7 +856,7 @@ inline static Function pr_TextGrid_peekTier (TextGrid me, long tierNumber) {
 }
 
 FORM (STRING_TextGrid_getTierName, U"TextGrid: Get tier name", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
 	OK
 DO
 	STRING_ONE (TextGrid)
@@ -866,7 +866,7 @@ DO
 }
 
 FORM (BOOLEAN_TextGrid_isIntervalTier, U"TextGrid: Is interval tier?", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -884,7 +884,7 @@ static IntervalTier pr_TextGrid_peekIntervalTier (TextGrid me, long tierNumber)
 }
 
 FORM (INTEGER_TextGrid_getNumberOfIntervals, U"TextGrid: Get number of intervals", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -900,8 +900,8 @@ static TextInterval pr_TextGrid_peekInterval (TextGrid me, long tierNumber, long
 }
 
 FORM (REAL_TextGrid_getStartTimeOfInterval, U"TextGrid: Get start time of interval", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	NATURAL4 (intervalNumber, STRING_INTERVAL_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (intervalNumber, STRING_INTERVAL_NUMBER, U"1")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -911,8 +911,8 @@ DO
 }
 
 FORM (REAL_TextGrid_getEndTimeOfInterval, U"TextGrid: Get end time of interval", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	NATURAL4 (intervalNumber, STRING_INTERVAL_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (intervalNumber, STRING_INTERVAL_NUMBER, U"1")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -922,8 +922,8 @@ DO
 }
 
 FORM (STRING_TextGrid_getLabelOfInterval, U"TextGrid: Get label of interval", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	NATURAL4 (intervalNumber, STRING_INTERVAL_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (intervalNumber, STRING_INTERVAL_NUMBER, U"1")
 	OK
 DO
 	STRING_ONE (TextGrid)
@@ -933,8 +933,8 @@ DO
 }
 
 FORM (INTEGER_TextGrid_getIntervalAtTime, U"TextGrid: Get interval at time", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -944,8 +944,8 @@ DO
 }
 
 FORM (INTEGER_TextGrid_getLowIntervalAtTime, U"TextGrid: Get low interval at time", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -955,8 +955,8 @@ DO
 }
 
 FORM (INTEGER_TextGrid_getHighIntervalAtTime, U"TextGrid: Get high interval at time", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -966,8 +966,8 @@ DO
 }
 
 FORM (INTEGER_TextGrid_getIntervalEdgeFromTime, U"TextGrid: Get interval edge from time", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -977,8 +977,8 @@ DO
 }
 
 FORM (INTEGER_TextGrid_getIntervalBoundaryFromTime, U"TextGrid: Get interval boundary from time", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -988,9 +988,9 @@ DO
 }
 
 FORM (INTEGER_TextGrid_countIntervalsWhere, U"Count intervals", U"TextGrid: Count intervals where...") {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	OPTIONMENU_ENUM4 (countIntervalsWhoseLabel___, U"Count intervals whose label...", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"hi")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
+	OPTIONMENU_ENUM (countIntervalsWhoseLabel___, U"Count intervals whose label...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -1006,7 +1006,7 @@ static TextTier pr_TextGrid_peekTextTier (TextGrid me, long tierNumber) {
 }
 
 FORM (INTEGER_TextGrid_getNumberOfPoints, U"TextGrid: Get number of points", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -1022,8 +1022,8 @@ static TextPoint pr_TextGrid_peekPoint (TextGrid me, long tierNumber, long point
 }
 
 FORM (REAL_TextGrid_getTimeOfPoint, U"TextGrid: Get time of point", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	NATURAL4 (pointNumber, STRING_POINT_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (pointNumber, STRING_POINT_NUMBER, U"1")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -1033,8 +1033,8 @@ DO
 }
 
 FORM (STRING_TextGrid_getLabelOfPoint, U"TextGrid: Get label of point", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	NATURAL4 (pointNumber, STRING_POINT_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (pointNumber, STRING_POINT_NUMBER, U"1")
 	OK
 DO
 	STRING_ONE (TextGrid)
@@ -1044,8 +1044,8 @@ DO
 }
 
 FORM (INTEGER_TextGrid_getLowIndexFromTime, U"Get low index", U"AnyTier: Get low index from time...") {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -1055,8 +1055,8 @@ DO
 }
 
 FORM (INTEGER_TextGrid_getHighIndexFromTime, U"Get high index", U"AnyTier: Get high index from time...") {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -1066,8 +1066,8 @@ DO
 }
 
 FORM (INTEGER_TextGrid_getNearestIndexFromTime, U"Get nearest index", U"AnyTier: Get nearest index from time...") {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -1077,9 +1077,9 @@ DO
 }
 
 FORM (INTEGER_TextGrid_countPointsWhere, U"Count points", U"TextGrid: Count points where...") {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	OPTIONMENU_ENUM4 (countPointsWhoseLabel___, U"Count points whose label...", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"hi")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
+	OPTIONMENU_ENUM (countPointsWhoseLabel___, U"Count points whose label...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -1088,8 +1088,8 @@ DO
 }
 
 FORM (INTEGER_TextGrid_countLabels, U"Count labels", U"TextGrid: Count labels...") {
-	INTEGER4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	SENTENCE4 (labelText, U"Label text", U"a")
+	INTEGER (tierNumber, STRING_TIER_NUMBER, U"1")
+	SENTENCE (labelText, U"Label text", U"a")
 	OK
 DO
 	NUMBER_ONE (TextGrid)
@@ -1112,8 +1112,8 @@ DIRECT (MODIFY_TextGrid_convertToUnicode) {
 }
 
 FORM (MODIFY_TextGrid_insertIntervalTier, U"TextGrid: Insert interval tier", nullptr) {
-	NATURAL4 (position, U"Position", U"1 (= at top)")
-	WORD4 (name, U"Name", U"")
+	NATURAL (position, U"Position", U"1 (= at top)")
+	WORD (name, U"Name", U"")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1127,8 +1127,8 @@ DO
 }
 
 FORM (MODIFY_TextGrid_insertPointTier, U"TextGrid: Insert point tier", nullptr) {
-	NATURAL4 (position, U"Position", U"1 (= at top)")
-	WORD4 (name, U"Name", U"")
+	NATURAL (position, U"Position", U"1 (= at top)")
+	WORD (name, U"Name", U"")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1142,9 +1142,9 @@ DO
 }
 
 FORM (MODIFY_TextGrid_duplicateTier, U"TextGrid: Duplicate tier", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	NATURAL4 (position, U"Position", U"1 (= at top)")
-	WORD4 (name, U"Name", U"")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (position, U"Position", U"1 (= at top)")
+	WORD (name, U"Name", U"")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1158,7 +1158,7 @@ DO
 }
 
 FORM (MODIFY_TextGrid_removeTier, U"TextGrid: Remove tier", nullptr) {
-	NATURALVAR (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1170,8 +1170,8 @@ DO
 }
 
 FORM (MODIFY_TextGrid_insertBoundary, U"TextGrid: Insert boundary", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1180,8 +1180,8 @@ DO
 }
 
 FORM (MODIFY_TextGrid_removeLeftBoundary, U"TextGrid: Remove left boundary", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	NATURAL4 (intervalNumber, STRING_INTERVAL_NUMBER, U"2")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (intervalNumber, STRING_INTERVAL_NUMBER, U"2")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1204,8 +1204,8 @@ DO
 }
 
 FORM (MODIFY_TextGrid_removeRightBoundary, U"TextGrid: Remove right boundary", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	NATURAL4 (intervalNumber, STRING_INTERVAL_NUMBER, U"2")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (intervalNumber, STRING_INTERVAL_NUMBER, U"2")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1228,8 +1228,8 @@ DO
 }
 
 FORM (MODIFY_TextGrid_removeBoundaryAtTime, U"TextGrid: Remove boundary at time", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1238,10 +1238,10 @@ DO
 }
 
 FORM (MODIFY_TextGrid_setIntervalText, U"TextGrid: Set interval text", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	NATURAL4 (intervalNumber, STRING_INTERVAL_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (intervalNumber, STRING_INTERVAL_NUMBER, U"1")
 	LABEL (U"", U"Text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1250,10 +1250,10 @@ DO
 }
 
 FORM (MODIFY_TextGrid_insertPoint, U"TextGrid: Insert point", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	LABEL (U"", U"Text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1262,8 +1262,8 @@ DO
 }
 
 FORM (MODIFY_TextGrid_removePoint, U"TextGrid: Remove point", nullptr) {
-	NATURALVAR (tierNumber, STRING_TIER_NUMBER, U"1")
-	NATURALVAR (pointNumber, STRING_POINT_NUMBER, U"2")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (pointNumber, STRING_POINT_NUMBER, U"2")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1283,9 +1283,9 @@ DO
 }
 
 FORM (MODIFY_TextGrid_removePoints, U"Remove points", nullptr) {
-	NATURALVAR (tierNumber, STRING_TIER_NUMBER, U"1")
-	OPTIONMENU_ENUM4 (removeEveryPointWhoseLabel___, U"Remove every point whose label...", kMelder_string, DEFAULT)
-	SENTENCEVAR (___theText, U"...the text", U"hi")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	OPTIONMENU_ENUM (removeEveryPointWhoseLabel___, U"Remove every point whose label...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1294,10 +1294,10 @@ DO
 }
 
 FORM (MODIFY_TextGrid_setPointText, U"TextGrid: Set point text", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	NATURAL4 (pointNumber, STRING_POINT_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (pointNumber, STRING_POINT_NUMBER, U"1")
 	LABEL (U"", U"Text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	MODIFY_EACH (TextGrid)
@@ -1308,7 +1308,7 @@ DO
 // MARK: Analyse
 
 FORM (NEW1_TextGrid_extractOneTier, U"TextGrid: Extract one tier", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
 	OK
 DO
 	CONVERT_EACH (TextGrid)
@@ -1319,7 +1319,7 @@ DO
 }
 
 FORM (NEW1_TextGrid_extractTier, U"TextGrid: Extract tier", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
 	OK
 DO
 	CONVERT_EACH (TextGrid)
@@ -1329,9 +1329,9 @@ DO
 }
 
 FORM (NEW_TextGrid_extractPart, U"TextGrid: Extract part", nullptr) {
-	REAL4 (fromTime, U"left Time range (s)", U"0.0")
-	REAL4 (toTime, U"right Time range (s)", U"1.0")
-	BOOLEAN4 (preserveTimes, U"Preserve times", false)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"1.0")
+	BOOLEAN (preserveTimes, U"Preserve times", false)
 	OK
 DO
 	CONVERT_EACH (TextGrid)
@@ -1340,9 +1340,9 @@ DO
 }
 
 FORM (NEW_TextGrid_getStartingPoints, U"TextGrid: Get starting points", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	OPTIONMENU_ENUM4 (getStartingPointsWhoseLabel___, U"Get starting points whose label...", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"hi")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	OPTIONMENU_ENUM (getStartingPointsWhoseLabel___, U"Get starting points whose label...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
 	OK
 DO
 	CONVERT_EACH (TextGrid)
@@ -1351,9 +1351,9 @@ DO
 }
 
 FORM (NEW_TextGrid_getEndPoints, U"TextGrid: Get end points", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	OPTIONMENU_ENUM4 (getEndPointsWhoseLabel___, U"Get end points whose label", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"hi")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	OPTIONMENU_ENUM (getEndPointsWhoseLabel___, U"Get end points whose label", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
 	OK
 DO
 	CONVERT_EACH (TextGrid)
@@ -1362,9 +1362,9 @@ DO
 }
 
 FORM (NEW_TextGrid_getCentrePoints, U"TextGrid: Get centre points", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	OPTIONMENU_ENUM4 (getCentrePointsWhoseLabel___, U"Get centre points whose label", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"hi")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	OPTIONMENU_ENUM (getCentrePointsWhoseLabel___, U"Get centre points whose label", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
 	OK
 DO
 	CONVERT_EACH (TextGrid)
@@ -1373,9 +1373,9 @@ DO
 }
 
 FORM (NEW_TextGrid_getPoints, U"Get points", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	OPTIONMENU_ENUM4 (getPointsWhoseLabel___, U"Get points whose label...", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"hi")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	OPTIONMENU_ENUM (getPointsWhoseLabel___, U"Get points whose label...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
 	OK
 DO
 	CONVERT_EACH (TextGrid)
@@ -1384,11 +1384,11 @@ DO
 }
 
 FORM (NEW_TextGrid_getPoints_preceded, U"Get points (preceded)", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	OPTIONMENU_ENUM4 (getPointsWhoseLabel___, U"Get points whose label...", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"there")
-	OPTIONMENU_ENUM4 (___precededByALabelThat___, U"...preceded by a label that...", kMelder_string, DEFAULT)
-	SENTENCE4 (____theText, U" ...the text", U"hi")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	OPTIONMENU_ENUM (getPointsWhoseLabel___, U"Get points whose label...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"there")
+	OPTIONMENU_ENUM (___precededByALabelThat___, U"...preceded by a label that...", kMelder_string, DEFAULT)
+	SENTENCE (____theText, U" ...the text", U"hi")
 	OK
 DO
 	CONVERT_EACH (TextGrid)
@@ -1398,11 +1398,11 @@ DO
 }
 
 FORM (NEW_TextGrid_getPoints_followed, U"Get points (followed)", nullptr) {
-	NATURAL4 (tierNumber, STRING_TIER_NUMBER, U"1")
-	OPTIONMENU_ENUM4 (getPointsWhoseLabel___, U"Get points whose label...", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"hi")
-	OPTIONMENU_ENUM4 (___followedByALabelThat___, U"...followed by a label that...", kMelder_string, DEFAULT)
-	SENTENCE4 (____theText, U" ...the text", U"there")
+	NATURAL (tierNumber, STRING_TIER_NUMBER, U"1")
+	OPTIONMENU_ENUM (getPointsWhoseLabel___, U"Get points whose label...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
+	OPTIONMENU_ENUM (___followedByALabelThat___, U"...followed by a label that...", kMelder_string, DEFAULT)
+	SENTENCE (____theText, U" ...the text", U"there")
 	OK
 DO
 	CONVERT_EACH (TextGrid)
@@ -1452,8 +1452,8 @@ DIRECT (MODIFY_TextGrid_LongSound_scaleTimes) {
 // MARK: - TEXTTIER
 
 FORM (MODIFY_TextTier_addPoint, U"TextTier: Add point", U"TextTier: Add point...") {
-	REAL4 (time, U"Time (s)", U"0.5")
-	SENTENCE4 (text, U"Text", U"")
+	REAL (time, U"Time (s)", U"0.5")
+	SENTENCE (text, U"Text", U"")
 	OK
 DO
 	MODIFY_EACH (TextTier)
@@ -1468,7 +1468,7 @@ DIRECT (NEW_TextTier_downto_PointProcess) {
 }
 
 FORM (NEW_TextTier_downto_TableOfReal, U"TextTier: Down to TableOfReal", nullptr) {
-	SENTENCE4 (label, U"Label", U"")
+	SENTENCE (label, U"Label", U"")
 	OK
 DO
 	CONVERT_EACH (TextTier)
@@ -1483,7 +1483,7 @@ DIRECT (NEW_TextTier_downto_TableOfReal_any) {
 }
 
 FORM (STRING_TextTier_getLabelOfPoint, U"Get label of point", nullptr) {
-	NATURAL4 (pointNumber, U"Point number", U"1")
+	NATURAL (pointNumber, U"Point number", U"1")
 	OK
 DO
 	STRING_ONE (TextTier)
@@ -1494,7 +1494,7 @@ DO
 }
 
 FORM (NEW_TextTier_getPoints, U"Get points", nullptr) {
-	SENTENCE4 (text, U"Text", U"")
+	SENTENCE (text, U"Text", U"")
 	OK
 DO
 	CONVERT_EACH (TextTier)
@@ -1509,7 +1509,7 @@ DIRECT (HELP_TextTier_help) {
 // MARK: - WORDLIST
 
 FORM (BOOLEAN_WordList_hasWord, U"Does word occur in list?", U"WordList") {
-	SENTENCE4 (word, U"Word", U"")
+	SENTENCE (word, U"Word", U"")
 	OK
 DO
 	NUMBER_ONE (WordList)
diff --git a/fon/praat_Tiers.cpp b/fon/praat_Tiers.cpp
index 00a3683..425ad6d 100644
--- a/fon/praat_Tiers.cpp
+++ b/fon/praat_Tiers.cpp
@@ -33,9 +33,9 @@
 // MARK: New
 
 FORM (NEW1_AmplitudeTier_create, U"Create empty AmplitudeTier", nullptr) {
-	WORD4 (name, U"Name", U"empty")
-	REAL4 (startTime, U"Start time (s)", U"0.0")
-	REAL4 (endTime, U"End time (s)", U"1.0")
+	WORD (name, U"Name", U"empty")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
 	OK
 DO
 	if (endTime <= startTime) Melder_throw (U"The end time should be greater than the start time.");
@@ -71,9 +71,9 @@ DIRECT (HINT_AmplitudeTier_Sound_viewAndEdit) {
 // MARK: Query
 
 FORM (REAL_AmplitudeTier_getShimmer_local, U"AmplitudeTier: Get shimmer (local)", U"AmplitudeTier: Get shimmer (local)...") {
-	REAL4 (shortestPeriod, U"Shortest period (s)", U"0.0001")
-	REAL4 (longestPeriod, U"Longest period (s)", U"0.02")
-	POSITIVE4 (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	REAL (shortestPeriod, U"Shortest period (s)", U"0.0001")
+	REAL (longestPeriod, U"Longest period (s)", U"0.02")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_ONE (AmplitudeTier)
@@ -82,9 +82,9 @@ DO
 }
 
 FORM (REAL_AmplitudeTier_getShimmer_local_dB, U"AmplitudeTier: Get shimmer (local, dB)", U"AmplitudeTier: Get shimmer (local, dB)...") {
-	REAL4 (shortestPeriod, U"Shortest period (s)", U"0.0001")
-	REAL4 (longestPeriod, U"Longest period (s)", U"0.02")
-	POSITIVE4 (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	REAL (shortestPeriod, U"Shortest period (s)", U"0.0001")
+	REAL (longestPeriod, U"Longest period (s)", U"0.02")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_ONE (AmplitudeTier)
@@ -93,9 +93,9 @@ DO
 }
 
 FORM (REAL_AmplitudeTier_getShimmer_apq3, U"AmplitudeTier: Get shimmer (apq3)", U"AmplitudeTier: Get shimmer (apq3)...") {
-	REAL4 (shortestPeriod, U"Shortest period (s)", U"0.0001")
-	REAL4 (longestPeriod, U"Longest period (s)", U"0.02")
-	POSITIVE4 (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	REAL (shortestPeriod, U"Shortest period (s)", U"0.0001")
+	REAL (longestPeriod, U"Longest period (s)", U"0.02")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_ONE (AmplitudeTier)
@@ -104,9 +104,9 @@ DO
 }
 
 FORM (REAL_AmplitudeTier_getShimmer_apq5, U"AmplitudeTier: Get shimmer (apq5)", U"AmplitudeTier: Get shimmer (apq5)...") {
-	REAL4 (shortestPeriod, U"Shortest period (s)", U"0.0001")
-	REAL4 (longestPeriod, U"Longest period (s)", U"0.02")
-	POSITIVE4 (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	REAL (shortestPeriod, U"Shortest period (s)", U"0.0001")
+	REAL (longestPeriod, U"Longest period (s)", U"0.02")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_ONE (AmplitudeTier)
@@ -115,9 +115,9 @@ DO
 }
 
 FORM (REAL_AmplitudeTier_getShimmer_apq11, U"AmplitudeTier: Get shimmer (apq11)", U"AmplitudeTier: Get shimmer (apq11)...") {
-	REAL4 (shortestPeriod, U"Shortest period (s)", U"0.0001")
-	REAL4 (longestPeriod, U"Longest period (s)", U"0.02")
-	POSITIVE4 (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	REAL (shortestPeriod, U"Shortest period (s)", U"0.0001")
+	REAL (longestPeriod, U"Longest period (s)", U"0.02")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_ONE (AmplitudeTier)
@@ -126,9 +126,9 @@ DO
 }
 
 FORM (REAL_AmplitudeTier_getShimmer_dda, U"AmplitudeTier: Get shimmer (dda)", U"AmplitudeTier: Get shimmer (dda)...") {
-	REAL4 (shortestPeriod, U"Shortest period (s)", U"0.0001")
-	REAL4 (longestPeriod, U"Longest period (s)", U"0.02")
-	POSITIVE4 (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	REAL (shortestPeriod, U"Shortest period (s)", U"0.0001")
+	REAL (longestPeriod, U"Longest period (s)", U"0.02")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_ONE (AmplitudeTier)
@@ -138,7 +138,7 @@ DO
 
 /*
 FORM (REAL_AmplitudeTier_getValueAtTime, U"Get AmplitudeTier value", U"AmplitudeTier: Get value at time...") {
-	REAL4 (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (AmplitudeTier)
@@ -147,7 +147,7 @@ DO
 }
 	
 FORM (REAL_AmplitudeTier_getValueAtIndex, U"Get AmplitudeTier value", U"AmplitudeTier: Get value at index...") {
-	INTEGER4 (pointNumber, U"Point number", U"10")
+	INTEGER (pointNumber, U"Point number", U"10")
 	OK
 DO
 	NUMBER_ONE (AmplitudeTier)
@@ -159,8 +159,8 @@ DO
 // MARK: Modify
 
 FORM (MODIFY_AmplitudeTier_addPoint, U"Add one point", U"AmplitudeTier: Add point...") {
-	REAL4 (time, U"Time (s)", U"0.5")
-	REAL4 (soundPressure, U"Sound pressure (Pa)", U"0.8")
+	REAL (time, U"Time (s)", U"0.5")
+	REAL (soundPressure, U"Sound pressure (Pa)", U"0.8")
 	OK
 DO
 	MODIFY_EACH (AmplitudeTier)
@@ -175,7 +175,7 @@ FORM (MODIFY_AmplitudeTier_formula, U"AmplitudeTier: Formula", U"AmplitudeTier:
 	LABEL (U"", U"   # self = the value of the colth point, in Pascal")
 	LABEL (U"", U"   self = `formula'")
 	LABEL (U"", U"endfor")
-	TEXTFIELD4 (formula, U"formula", U"- self ; upside down")
+	TEXTFIELD (formula, U"formula", U"- self ; upside down")
 	OK
 DO
 	MODIFY_EACH_WEAK (AmplitudeTier)
@@ -186,8 +186,8 @@ DO
 // MARK: Synthesize
 
 FORM (NEW_AmplitudeTier_to_Sound, U"AmplitudeTier: To Sound (pulse train)", U"AmplitudeTier: To Sound (pulse train)...") {
-	POSITIVE4 (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
-	NATURAL4 (interpolationDepth, U"Interpolation depth (samples)", U"2000")
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	NATURAL (interpolationDepth, U"Interpolation depth (samples)", U"2000")
 	OK
 DO
 	CONVERT_EACH (AmplitudeTier)
@@ -210,7 +210,7 @@ DIRECT (NEW_AmplitudeTier_downto_TableOfReal) {
 }
 
 FORM (NEW_AmplitudeTier_to_IntensityTier, U"AmplitudeTier: To IntensityTier", U"AmplitudeTier: To IntensityTier...") {
-	REAL4 (threshold, U"Threshold (dB)", U"-10000.0")
+	REAL (threshold, U"Threshold (dB)", U"-10000.0")
 	OK
 DO
 	CONVERT_EACH (AmplitudeTier)
@@ -231,9 +231,9 @@ DIRECT (NEW1_Sound_AmplitudeTier_multiply) {
 // MARK: New
 
 FORM (NEW1_DurationTier_create, U"Create empty DurationTier", U"Create DurationTier...") {
-	WORD4 (name, U"Name", U"empty")
-	REAL4 (startTime, U"Start time (s)", U"0.0")
-	REAL4 (endTime, U"End time (s)", U"1.0")
+	WORD (name, U"Name", U"empty")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
 	OK
 DO
 	if (endTime <= startTime) Melder_throw (U"Your end time should be greater than your start time.");
@@ -276,8 +276,8 @@ DIRECT (HINT_DurationTier_Manipulation_replace) {
 // MARK: Query
 
 FORM (REAL_DurationTier_getTargetDuration, U"Get target duration", nullptr) {
-	REAL4 (fromSourceTime, U"left Source time range (s)", U"0.0")
-	REAL4 (toSourceTime, U"right Source time range (s)", U"1.0")
+	REAL (fromSourceTime, U"left Source time range (s)", U"0.0")
+	REAL (toSourceTime, U"right Source time range (s)", U"1.0")
 	OK
 DO
 	NUMBER_ONE (DurationTier)
@@ -286,7 +286,7 @@ DO
 }
 
 FORM (REAL_DurationTier_getValueAtTime, U"Get DurationTier value", U"DurationTier: Get value at time...") {
-	REAL4 (sourceTime, U"Source time (s)", U"0.5")
+	REAL (sourceTime, U"Source time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (DurationTier)
@@ -295,7 +295,7 @@ DO
 }
 
 FORM (REAL_DurationTier_getValueAtIndex, U"Get DurationTier value", U"Duration: Get value at index...") {
-	INTEGER4 (pointNumber, U"Point number", U"10")
+	INTEGER (pointNumber, U"Point number", U"10")
 	OK
 DO
 	NUMBER_ONE (DurationTier)
@@ -306,8 +306,8 @@ DO
 // MARK: Modify
 
 FORM (MODIFY_DurationTier_addPoint, U"Add one point to DurationTier", U"DurationTier: Add point...") {
-	REAL4 (time, U"Time (s)", U"0.5")
-	REAL4 (relativeDuration, U"Relative duration", U"1.5")
+	REAL (time, U"Time (s)", U"0.5")
+	REAL (relativeDuration, U"Relative duration", U"1.5")
 	OK
 DO
 	MODIFY_EACH (DurationTier)
@@ -322,7 +322,7 @@ FORM (MODIFY_DurationTier_formula, U"DurationTier: Formula", U"DurationTier: For
 	LABEL (U"", U"   # self = the value of the colth point, in relative units")
 	LABEL (U"", U"   self = `formula'")
 	LABEL (U"", U"endfor")
-	TEXTFIELD4 (formula, U"formula", U"self * 1.5 ; slow down")
+	TEXTFIELD (formula, U"formula", U"self * 1.5 ; slow down")
 	OK
 DO
 	MODIFY_EACH_WEAK (DurationTier)
@@ -343,14 +343,14 @@ DIRECT (NEW_DurationTier_downto_PointProcess) {
 // MARK: New
 
 FORM (NEW1_FormantGrid_create, U"Create FormantGrid", nullptr) {
-	WORD4 (name, U"Name", U"schwa")
-	REAL4 (startTime, U"Start time (s)", U"0.0")
-	REAL4 (endTime, U"End time (s)", U"1.0")
-	NATURAL4 (numberOfFormants, U"Number of formants", U"10")
-	POSITIVE4 (initialFirstFormant, U"Initial first formant (Hz)", U"550.0")
-	POSITIVE4 (initialFormatSpacing, U"Initial formant spacing (Hz)", U"1100.0")
-	REAL4 (initialFirstBandwidth, U"Initial first bandwidth (Hz)", U"60.0")
-	REAL4 (initialBandwidthSpacing, U"Initial bandwidth spacing (Hz)", U"50.0")
+	WORD (name, U"Name", U"schwa")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
+	NATURAL (numberOfFormants, U"Number of formants", U"10")
+	POSITIVE (initialFirstFormant, U"Initial first formant (Hz)", U"550.0")
+	POSITIVE (initialFormatSpacing, U"Initial formant spacing (Hz)", U"1100.0")
+	REAL (initialFirstBandwidth, U"Initial first bandwidth (Hz)", U"60.0")
+	REAL (initialBandwidthSpacing, U"Initial bandwidth spacing (Hz)", U"50.0")
 	OK
 DO
 	if (endTime <= startTime) Melder_throw (U"Your end time should be greater than your start time.");
@@ -393,7 +393,7 @@ DIRECT (WINDOW_FormantGrid_edit) {
 
 FORM (MODIFY_FormantGrid_formula_frequencies, U"FormantGrid: Formula (frequencies)", U"Formant: Formula (frequencies)...") {
 	LABEL (U"", U"row is formant number, col is point number: for row from 1 to nrow do for col from 1 to ncol do F (row, col) :=")
-	TEXTFIELD4 (formula, U"formula", U"if row = 2 then self + 200 else self fi")
+	TEXTFIELD (formula, U"formula", U"if row = 2 then self + 200 else self fi")
 	OK
 DO
 	MODIFY_EACH_WEAK (FormantGrid)
@@ -404,7 +404,7 @@ DO
 FORM (MODIFY_FormantGrid_formula_bandwidths, U"FormantGrid: Formula (bandwidths)", U"Formant: Formula (bandwidths)...") {
 	LABEL (U"", U"row is formant number, col is point number: for row from 1 to nrow do for col from 1 to ncol do B (row, col) :=")
 	LABEL (U"", U"self [] is the FormantGrid itself, so it returns frequencies, not bandwidths!")
-	TEXTFIELD4 (formula, U"formula", U"self / 10 ; one tenth of the formant frequency")
+	TEXTFIELD (formula, U"formula", U"self / 10 ; one tenth of the formant frequency")
 	OK
 DO
 	MODIFY_EACH_WEAK (FormantGrid)
@@ -414,9 +414,9 @@ DO
 }
 
 FORM (MODIFY_FormantGrid_addFormantPoint, U"FormantGrid: Add formant point", U"FormantGrid: Add formant point...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
-	POSITIVE4 (frequency, U"Frequency (Hz)", U"550.0")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (time, U"Time (s)", U"0.5")
+	POSITIVE (frequency, U"Frequency (Hz)", U"550.0")
 	OK
 DO
 	MODIFY_EACH (FormantGrid)
@@ -425,9 +425,9 @@ DO
 }
 
 FORM (MODIFY_FormantGrid_addBandwidthPoint, U"FormantGrid: Add bandwidth point", U"FormantGrid: Add bandwidth point...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
-	POSITIVE4 (bandwidth, U"Bandwidth (Hz)", U"100.0")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (time, U"Time (s)", U"0.5")
+	POSITIVE (bandwidth, U"Bandwidth (Hz)", U"100.0")
 	OK
 DO
 	MODIFY_EACH (FormantGrid)
@@ -436,9 +436,9 @@ DO
 }
 
 FORM (MODIFY_FormantGrid_removeBandwidthPointsBetween, U"Remove bandwidth points between", U"FormantGrid: Remove bandwidth points between...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
-	REAL4 (fromTime, U"From time (s)", U"0.3")
-	REAL4 (toTime, U"To time (s)", U"0.7")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (fromTime, U"From time (s)", U"0.3")
+	REAL (toTime, U"To time (s)", U"0.7")
 	OK
 DO
 	MODIFY_EACH (FormantGrid)
@@ -447,9 +447,9 @@ DO
 }
 
 FORM (MODIFY_FormantGrid_removeFormantPointsBetween, U"Remove formant points between", U"FormantGrid: Remove formant points between...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
-	REAL4 (fromTime, U"From time (s)", U"0.3")
-	REAL4 (toTime, U"To time (s)", U"0.7")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (fromTime, U"From time (s)", U"0.3")
+	REAL (toTime, U"To time (s)", U"0.7")
 	OK
 DO
 	MODIFY_EACH (FormantGrid)
@@ -460,8 +460,8 @@ DO
 // MARK: Convert
 
 FORM (NEW_FormantGrid_to_Formant, U"FormantGrid: To Formant", nullptr) {
-	POSITIVE4 (timeStep, U"Time step (s)", U"0.01")
-	REAL4 (intensity, U"Intensity (Pa\u00B2)", U"0.1")
+	POSITIVE (timeStep, U"Time step (s)", U"0.01")
+	REAL (intensity, U"Intensity (Pa\u00B2)", U"0.1")
 	OK
 DO
 	if (intensity < 0.0) Melder_throw (U"Intensity cannot be negative.");
@@ -489,9 +489,9 @@ DIRECT (NEW1_Sound_FormantGrid_filter_noscale) {
 // MARK: New
 
 FORM (NEW1_FormantTier_create, U"Create empty FormantTier", nullptr) {
-	WORD4 (name, U"Name", U"empty")
-	REAL4 (startTime, U"Start time (s)", U"0.0")
-	REAL4 (endTime, U"End time (s)", U"1.0")
+	WORD (name, U"Name", U"empty")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
 	OK
 DO
 	if (endTime <= startTime) Melder_throw (U"Your end time should be greater than your start time.");
@@ -504,8 +504,8 @@ DO
 
 FORM (GRAPHICS_FormantTier_speckle, U"Draw FormantTier", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	POSITIVE4 (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (FormantTier)
@@ -516,8 +516,8 @@ DO
 // MARK: Query
 
 FORM (REAL_FormantTier_getValueAtTime, U"FormantTier: Get value", U"FormantTier: Get value at time...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (FormantTier)
@@ -526,8 +526,8 @@ DO
 }
 
 FORM (REAL_FormantTier_getBandwidthAtTime, U"FormantTier: Get bandwidth", U"FormantTier: Get bandwidth at time...") {
-	NATURAL4 (formantNumber, U"Formant number", U"1")
-	REAL4 (time, U"Time (s)", U"0.5")
+	NATURAL (formantNumber, U"Formant number", U"1")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (FormantTier)
@@ -538,9 +538,9 @@ DO
 // MARK: Modify
 
 FORM (MODIFY_FormantTier_addPoint, U"Add one point", U"FormantTier: Add point...") {
-	REAL4 (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	LABEL (U"", U"Frequencies and bandwidths (Hz):")
-	TEXTFIELD4 (formantBandwidthPairs, U"fb pairs", U"500 50 1500 100 2500 150 3500 200 4500 300")
+	TEXTFIELD (formantBandwidthPairs, U"fb pairs", U"500 50 1500 100 2500 150 3500 200 4500 300")
 	OK
 DO
 	autoFormantPoint point = FormantPoint_create (time);
@@ -560,8 +560,8 @@ DO
 // MARK: Convert
 
 FORM (NEW_FormantTier_downto_TableOfReal, U"Down to TableOfReal", nullptr) {
-	BOOLEAN4 (includeFormants, U"Include formants", true)
-	BOOLEAN4 (includeBandwidths, U"Include bandwidths", false)
+	BOOLEAN (includeFormants, U"Include formants", true)
+	BOOLEAN (includeBandwidths, U"Include bandwidths", false)
 	OK
 DO
 	CONVERT_EACH (FormantTier)
@@ -588,9 +588,9 @@ DIRECT (NEW1_Sound_FormantTier_filter_noscale) {
 // MARK: New
 
 FORM (NEW1_IntensityTier_create, U"Create empty IntensityTier", nullptr) {
-	WORD4 (name, U"Name", U"empty")
-	REAL4 (startTime, U"Start time (s)", U"0.0")
-	REAL4 (endTime, U"End time (s)", U"1.0")
+	WORD (name, U"Name", U"empty")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
 	OK
 DO
 	if (endTime <= startTime) Melder_throw (U"Your end time should be greater than your start time.");
@@ -626,7 +626,7 @@ DIRECT (HINT_IntensityTier_Sound_viewAndEdit) {
 // MARK: Query
 
 FORM (REAL_IntensityTier_getValueAtTime, U"Get IntensityTier value", U"IntensityTier: Get value at time...") {
-	REAL4 (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (IntensityTier)
@@ -635,7 +635,7 @@ DO
 }
 
 FORM (REAL_IntensityTier_getValueAtIndex, U"Get IntensityTier value", U"IntensityTier: Get value at index...") {
-	INTEGER4 (pointNumber, U"Point number", U"10")
+	INTEGER (pointNumber, U"Point number", U"10")
 	OK
 DO
 	NUMBER_ONE (IntensityTier)
@@ -646,8 +646,8 @@ DO
 // MARK: Modify
 
 FORM (MODIFY_IntensityTier_addPoint, U"Add one point", U"IntensityTier: Add point...") {
-	REAL4 (time, U"Time (s)", U"0.5")
-	REAL4 (intensity, U"Intensity (dB)", U"75")
+	REAL (time, U"Time (s)", U"0.5")
+	REAL (intensity, U"Intensity (dB)", U"75")
 	OK
 DO
 	MODIFY_EACH (IntensityTier)
@@ -662,7 +662,7 @@ FORM (MODIFY_IntensityTier_formula, U"IntensityTier: Formula", U"IntensityTier:
 	LABEL (U"", U"   # self = the value of the colth point, in dB")
 	LABEL (U"", U"   self = `formula'")
 	LABEL (U"", U"endfor")
-	TEXTFIELD4 (formula, U"formula", U"self + 3.0")
+	TEXTFIELD (formula, U"formula", U"self + 3.0")
 	OK
 DO
 	MODIFY_EACH_WEAK (IntensityTier)
@@ -707,7 +707,7 @@ DIRECT (NEW1_Sound_IntensityTier_multiply_old) {
 }
 
 FORM (NEW1_Sound_IntensityTier_multiply, U"Sound & IntervalTier: Multiply", nullptr) {
-	BOOLEANVAR (scaleTo09, U"Scale to 0.9", true)
+	BOOLEAN (scaleTo09, U"Scale to 0.9", true)
 	OK
 DO
 	CONVERT_TWO (Sound, IntensityTier)
@@ -718,8 +718,8 @@ DO
 // MARK: - PITCHTIER
 
 FORM (MODIFY_PitchTier_addPoint, U"PitchTier: Add point", U"PitchTier: Add point...") {
-	REALVAR (time, U"Time (s)", U"0.5")
-	REALVAR (pitch, U"Pitch (Hz)", U"200.0")
+	REAL (time, U"Time (s)", U"0.5")
+	REAL (pitch, U"Pitch (Hz)", U"200.0")
 	OK
 DO
 	MODIFY_EACH (PitchTier)
@@ -728,9 +728,9 @@ DO
 }
 
 FORM (NEW1_PitchTier_create, U"Create empty PitchTier", nullptr) {
-	WORDVAR (name, U"Name", U"empty")
-	REALVAR (startTime, U"Start time (s)", U"0.0")
-	REALVAR (endTime, U"End time (s)", U"1.0")
+	WORD (name, U"Name", U"empty")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
 	OK
 DO
 	if (endTime <= startTime) Melder_throw (U"Your end time should be greater than your start time.");
@@ -746,7 +746,7 @@ DIRECT (NEW_PitchTier_downto_PointProcess) {
 }
 
 FORM (NEW_PitchTier_downto_TableOfReal, U"PitchTier: Down to TableOfReal", nullptr) {
-	RADIO4x (unit, U"Unit", 1, 0)
+	RADIOx (unit, U"Unit", 1, 0)
 		RADIOBUTTON (U"Hertz")
 		RADIOBUTTON (U"Semitones")
 	OK
@@ -758,9 +758,9 @@ DO
 
 FORM (GRAPHICS_old_PitchTier_draw, U"PitchTier: Draw", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	POSITIVEVAR (toFrequency, U"right Frequency range (Hz)", U"500.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	POSITIVE (toFrequency, U"right Frequency range (Hz)", U"500.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	if (toFrequency <= fromFrequency)
@@ -773,11 +773,11 @@ DO
 
 FORM (GRAPHICS_PitchTier_draw, U"PitchTier: Draw", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	REALVAR (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	POSITIVEVAR (toFrequency, U"right Frequency range (Hz)", U"500.0")
-	BOOLEANVAR (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	POSITIVE (toFrequency, U"right Frequency range (Hz)", U"500.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"")
-	OPTIONMENUSTRVAR (drawingMethod, U"Drawing method", 1)
+	OPTIONMENUSTR (drawingMethod, U"Drawing method", 1)
 		OPTION (U"lines")
 		OPTION (U"speckles")
 		OPTION (U"lines and speckles")
@@ -806,7 +806,7 @@ FORM (MODIFY_PitchTier_formula, U"PitchTier: Formula", U"PitchTier: Formula...")
 	LABEL (U"", U"   # self = the value of the colth point, in hertz")
 	LABEL (U"", U"   self = `formula'")
 	LABEL (U"", U"endfor")
-	TEXTFIELD4 (formula, U"formula", U"self * 2 ; one octave up")
+	TEXTFIELD (formula, U"formula", U"self * 2 ; one octave up")
 	OK
 DO
 	MODIFY_EACH_WEAK (PitchTier)
@@ -851,7 +851,7 @@ DO
 }
 	
 FORM (REAL_PitchTier_getValueAtTime, U"PitchTier: Get value at time", U"PitchTier: Get value at time...") {
-	REAL4 (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (PitchTier)
@@ -860,7 +860,7 @@ DO
 }
 	
 FORM (REAL_PitchTier_getValueAtIndex, U"PitchTier: Get value at index", U"PitchTier: Get value at index...") {
-	INTEGER4 (pointNumber, U"Point number", U"10")
+	INTEGER (pointNumber, U"Point number", U"10")
 	OK
 DO
 	NUMBER_ONE (PitchTier)
@@ -879,8 +879,8 @@ DIRECT (PLAY_PitchTier_hum) {
 }
 
 FORM (MODIFY_PitchTier_interpolateQuadratically, U"PitchTier: Interpolate quadratically", nullptr) {
-	NATURAL4 (numberOfPointsPerParabola, U"Number of points per parabola", U"4")
-	RADIO4x (unit, U"Unit", 2, 0)
+	NATURAL (numberOfPointsPerParabola, U"Number of points per parabola", U"4")
+	RADIOx (unit, U"Unit", 2, 0)
 		RADIOBUTTON (U"Hz")
 		RADIOBUTTON (U"Semitones")
 	OK
@@ -903,10 +903,10 @@ DIRECT (PLAY_PitchTier_playSine) {
 }
 
 FORM (MODIFY_PitchTier_shiftFrequencies, U"PitchTier: Shift frequencies", nullptr) {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"1000.0")
-	REALVAR (frequencyShift, U"Frequency shift", U"-20.0")
-	OPTIONMENUVAR (unit_i, U"Unit", 1)
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"1000.0")
+	REAL (frequencyShift, U"Frequency shift", U"-20.0")
+	OPTIONMENU (unit_i, U"Unit", 1)
 		OPTION (U"Hertz")
 		OPTION (U"mel")
 		OPTION (U"logHertz")
@@ -926,9 +926,9 @@ DO
 }
 
 FORM (MODIFY_PitchTier_multiplyFrequencies, U"PitchTier: Multiply frequencies", nullptr){
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"1000.0")
-	POSITIVEVAR (factor, U"Factor", U"1.2")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"1000.0")
+	POSITIVE (factor, U"Factor", U"1.2")
 	OK
 DO
 	MODIFY_EACH (PitchTier)
@@ -937,8 +937,8 @@ DO
 }
 
 FORM (MODIFY_PitchTier_stylize, U"PitchTier: Stylize", U"PitchTier: Stylize...") {
-	REALVAR (frequencyResolution, U"Frequency resolution", U"4.0")
-	RADIOVARx (unit, U"Unit", 2, 0)
+	REAL (frequencyResolution, U"Frequency resolution", U"4.0")
+	RADIOx (unit, U"Unit", 2, 0)
 		RADIOBUTTON (U"Hz")
 		RADIOBUTTON (U"Semitones")
 	OK
@@ -955,14 +955,14 @@ DIRECT (NEW_PitchTier_to_PointProcess) {
 }
 
 FORM (NEW_PitchTier_to_Sound_phonation, U"PitchTier: To Sound (phonation)", nullptr) {
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"44100")
-	POSITIVEVAR (adaptationFactor, U"Adaptation factor", U"1.0")
-	POSITIVEVAR (maximumPeriod, U"Maximum period (s)", U"0.05")
-	POSITIVEVAR (openPhase, U"Open phase", U"0.7")
-	REALVAR (collisionPhase, U"Collision phase", U"0.03")
-	POSITIVEVAR (power1, U"Power 1", U"3.0")
-	POSITIVEVAR (power2, U"Power 2", U"4.0")
-	BOOLEANVAR (hum, U"Hum", false)
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100")
+	POSITIVE (adaptationFactor, U"Adaptation factor", U"1.0")
+	POSITIVE (maximumPeriod, U"Maximum period (s)", U"0.05")
+	POSITIVE (openPhase, U"Open phase", U"0.7")
+	REAL (collisionPhase, U"Collision phase", U"0.03")
+	POSITIVE (power1, U"Power 1", U"3.0")
+	POSITIVE (power2, U"Power 2", U"4.0")
+	BOOLEAN (hum, U"Hum", false)
 	OK
 DO
 	CONVERT_EACH (PitchTier)
@@ -972,11 +972,11 @@ DO
 }
 
 FORM (NEW_PitchTier_to_Sound_pulseTrain, U"PitchTier: To Sound (pulse train)", nullptr) {
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"44100")
-	POSITIVEVAR (adaptationFactor, U"Adaptation factor", U"1.0")
-	POSITIVEVAR (adaptationTime, U"Adaptation time", U"0.05")
-	NATURALVAR (interpolationDepth, U"Interpolation depth (samples)", U"2000")
-	BOOLEANVAR (hum, U"Hum", false)
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100")
+	POSITIVE (adaptationFactor, U"Adaptation factor", U"1.0")
+	POSITIVE (adaptationTime, U"Adaptation time", U"0.05")
+	NATURAL (interpolationDepth, U"Interpolation depth (samples)", U"2000")
+	BOOLEAN (hum, U"Hum", false)
 	OK
 DO
 	CONVERT_EACH (PitchTier)
@@ -986,7 +986,7 @@ DO
 }
 
 FORM (NEW_PitchTier_to_Sound_sine, U"PitchTier: To Sound (sine)", nullptr) {
-	POSITIVEVAR (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
 	OK
 DO
 	CONVERT_EACH (PitchTier)
@@ -1029,7 +1029,7 @@ DIRECT (NEW1_PitchTier_PointProcess_to_PitchTier) {
 // MARK: - POINTPROCESS
 
 FORM (MODIFY_PointProcess_addPoint, U"PointProcess: Add point", U"PointProcess: Add point...") {
-	REALVAR (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	MODIFY_EACH (PointProcess)
@@ -1037,10 +1037,20 @@ DO
 	MODIFY_EACH_END
 }
 
+FORM (MODIFY_PointProcess_addPoints, U"PointProcess: Add points", U"PointProcess: Add point...") {
+	LABEL (U"", U"Times:")
+	NUMVEC (times, U"times", U"{ 0.1, 0.2, 0.5 }")
+	OK
+DO
+	MODIFY_EACH (PointProcess)
+		PointProcess_addPoints (me, times.get());
+	MODIFY_EACH_END
+}
+
 FORM (NEW1_PointProcess_createEmpty, U"Create an empty PointProcess", U"Create empty PointProcess...") {
-	WORDVAR (name, U"Name", U"empty")
-	REALVAR (startTime, U"Start time (s)", U"0.0")
-	REALVAR (endTime, U"End time (s)", U"1.0")
+	WORD (name, U"Name", U"empty")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
 	OK
 DO
 	if (endTime < startTime)
@@ -1051,10 +1061,10 @@ DO
 }
 
 FORM (NEW1_PointProcess_createPoissonProcess, U"Create Poisson process", U"Create Poisson process...") {
-	WORDVAR (name, U"Name", U"poisson")
-	REALVAR (startTime, U"Start time (s)", U"0.0")
-	REALVAR (endTime, U"End time (s)", U"1.0")
-	POSITIVEVAR (density, U"Density (/s)", U"100.0")
+	WORD (name, U"Name", U"poisson")
+	REAL (startTime, U"Start time (s)", U"0.0")
+	REAL (endTime, U"End time (s)", U"1.0")
+	POSITIVE (density, U"Density (/s)", U"100.0")
 	OK
 DO
 	if (endTime < startTime)
@@ -1072,7 +1082,7 @@ DIRECT (NEW1_PointProcesses_difference) {
 
 FORM (GRAPHICS_PointProcess_draw, U"PointProcess: Draw", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	BOOLEAN4 (garnish, U"Garnish", true)
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (PointProcess)
@@ -1091,7 +1101,7 @@ DIRECT (WINDOW_PointProcess_viewAndEdit) {
 
 FORM (MODIFY_PointProcess_fill, U"PointProcess: Fill", nullptr) {
 	praat_TimeFunction_RANGE (fromTime, toTime)
-	POSITIVE4 (period, U"Period (s)", U"0.01")
+	POSITIVE (period, U"Period (s)", U"0.01")
 	OK
 DO
 	MODIFY_EACH_WEAK (PointProcess)
@@ -1100,7 +1110,7 @@ DO
 }
 
 FORM (REAL_PointProcess_getInterval, U"PointProcess: Get interval", U"PointProcess: Get interval...") {
-	REAL4 (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (PointProcess)
@@ -1110,9 +1120,9 @@ DO
 
 #define dia_PointProcess_getRangeProperty(fromTime,toTime,shortestPeriod,longestPeriod,maximumPeriodfactor) \
 	praat_TimeFunction_RANGE (fromTime, toTime) \
-	REALVAR (shortestPeriod, U"Shortest period (s)", U"0.0001") \
-	REALVAR (longestPeriod, U"Longest period (s)", U"0.02") \
-	POSITIVEVAR (maximumPeriodFactor, U"Maximum period factor", U"1.3")
+	REAL (shortestPeriod, U"Shortest period (s)", U"0.0001") \
+	REAL (longestPeriod, U"Longest period (s)", U"0.02") \
+	POSITIVE (maximumPeriodFactor, U"Maximum period factor", U"1.3")
 
 FORM (REAL_PointProcess_getJitter_local, U"PointProcess: Get jitter (local)", U"PointProcess: Get jitter (local)...") {
 	dia_PointProcess_getRangeProperty (fromTime, toTime, shortestPeriod, longestPeriod, maximumPeriodfactor)
@@ -1185,7 +1195,7 @@ DO
 }
 
 FORM (INTEGER_PointProcess_getLowIndex, U"PointProcess: Get low index", U"PointProcess: Get low index...") {
-	REALVAR (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (PointProcess)
@@ -1194,7 +1204,7 @@ DO
 }
 
 FORM (INTEGER_PointProcess_getHighIndex, U"PointProcess: Get high index", U"PointProcess: Get high index...") {
-	REALVAR (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (PointProcess)
@@ -1203,7 +1213,7 @@ DO
 }
 
 FORM (INTEGER_PointProcess_getNearestIndex, U"PointProcess: Get nearest index", U"PointProcess: Get nearest index...") {
-	REALVAR (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (PointProcess)
@@ -1228,7 +1238,7 @@ DO
 }
 
 FORM (REAL_PointProcess_getTimeFromIndex, U"Get time", 0 /*"PointProcess: Get time from index..."*/) {
-	NATURAL4 (pointNumber, U"Point number", U"10")
+	NATURAL (pointNumber, U"Point number", U"10")
 	OK
 DO
 	NUMBER_ONE (PointProcess)
@@ -1260,7 +1270,7 @@ DIRECT (PLAY_PointProcess_play) {
 }
 
 FORM (MODIFY_PointProcess_removePoint, U"PointProcess: Remove point", U"PointProcess: Remove point...") {
-	NATURAL4 (pointNumber, U"Point number", U"1")
+	NATURAL (pointNumber, U"Point number", U"1")
 	OK
 DO
 	MODIFY_EACH (PointProcess)
@@ -1269,7 +1279,7 @@ DO
 }
 
 FORM (MODIFY_PointProcess_removePointNear, U"PointProcess: Remove point near", U"PointProcess: Remove point near...") {
-	REAL4 (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	MODIFY_EACH (PointProcess)
@@ -1278,8 +1288,8 @@ DO
 }
 
 FORM (MODIFY_PointProcess_removePoints, U"PointProcess: Remove points", U"PointProcess: Remove points...") {
-	NATURAL4 (fromPointNumber, U"From point number", U"1")
-	NATURAL4 (toPointNumber, U"To point number", U"10")
+	NATURAL (fromPointNumber, U"From point number", U"1")
+	NATURAL (toPointNumber, U"To point number", U"10")
 	OK
 DO
 	MODIFY_EACH (PointProcess)
@@ -1288,8 +1298,8 @@ DO
 }
 
 FORM (MODIFY_PointProcess_removePointsBetween, U"PointProcess: Remove points between", U"PointProcess: Remove points between...") {
-	REAL4 (fromTime, U"left Time range (s)", U"0.3")
-	REAL4 (toTime, U"right Time range (s)", U"0.7")
+	REAL (fromTime, U"left Time range (s)", U"0.3")
+	REAL (toTime, U"right Time range (s)", U"0.7")
 	OK
 DO
 	MODIFY_EACH (PointProcess)
@@ -1310,7 +1320,7 @@ DIRECT (NEW_PointProcess_to_Matrix) {
 }
 
 FORM (NEW_PointProcess_to_PitchTier, U"PointProcess: To PitchTier", U"PointProcess: To PitchTier...") {
-	POSITIVEVAR (maximumInterval, U"Maximum interval (s)", U"0.02")
+	POSITIVE (maximumInterval, U"Maximum interval (s)", U"0.02")
 	OK
 DO
 	CONVERT_EACH (PointProcess)
@@ -1319,8 +1329,8 @@ DO
 }
 
 FORM (NEW_PointProcess_to_TextGrid, U"PointProcess: To TextGrid...", U"PointProcess: To TextGrid...") {
-	SENTENCE4 (tierNames, U"Tier names", U"Mary John bell")
-	SENTENCE4 (pointTiers, U"Point tiers", U"bell")
+	SENTENCE (tierNames, U"Tier names", U"Mary John bell")
+	SENTENCE (pointTiers, U"Point tiers", U"bell")
 	OK
 DO
 	CONVERT_EACH (PointProcess)
@@ -1329,8 +1339,8 @@ DO
 }
 
 FORM (NEW_PointProcess_to_TextGrid_vuv, U"PointProcess: To TextGrid (vuv)...", U"PointProcess: To TextGrid (vuv)...") {
-	POSITIVE4 (maximumPeriod, U"Maximum period (s)", U"0.02")
-	REAL4 (meanPeriod, U"Mean period (s)", U"0.01")
+	POSITIVE (maximumPeriod, U"Maximum period (s)", U"0.02")
+	REAL (meanPeriod, U"Mean period (s)", U"0.01")
 	OK
 DO
 	CONVERT_EACH (PointProcess)
@@ -1345,13 +1355,13 @@ DIRECT (NEW_PointProcess_to_TextTier) {
 }
 
 FORM (NEW_PointProcess_to_Sound_phonation, U"PointProcess: To Sound (phonation)", U"PointProcess: To Sound (phonation)...") {
-	POSITIVE4 (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
-	POSITIVE4 (adaptationFactor, U"Adaptation factor", U"1.0")
-	POSITIVE4 (maximumPeriod, U"Maximum period (s)", U"0.05")
-	POSITIVE4 (openPhase, U"Open phase", U"0.7")
-	REAL4 (collisionPhase, U"Collision phase", U"0.03")
-	POSITIVE4 (power1, U"Power 1", U"3.0")
-	POSITIVE4 (power2, U"Power 2", U"4.0")
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	POSITIVE (adaptationFactor, U"Adaptation factor", U"1.0")
+	POSITIVE (maximumPeriod, U"Maximum period (s)", U"0.05")
+	POSITIVE (openPhase, U"Open phase", U"0.7")
+	REAL (collisionPhase, U"Collision phase", U"0.03")
+	POSITIVE (power1, U"Power 1", U"3.0")
+	POSITIVE (power2, U"Power 2", U"4.0")
 	OK
 DO
 	CONVERT_EACH (PointProcess)
@@ -1361,10 +1371,10 @@ DO
 }
 
 FORM (NEW_PointProcess_to_Sound_pulseTrain, U"PointProcess: To Sound (pulse train)", U"PointProcess: To Sound (pulse train)...") {
-	POSITIVE4 (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
-	POSITIVE4 (adaptationFactor, U"Adaptation factor", U"1.0")
-	POSITIVE4 (adaptationTime, U"Adaptation time (s)", U"0.05")
-	NATURAL4 (interpolationDepth, U"Interpolation depth (samples)", U"2000")
+	POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
+	POSITIVE (adaptationFactor, U"Adaptation factor", U"1.0")
+	POSITIVE (adaptationTime, U"Adaptation time (s)", U"0.05")
+	NATURAL (interpolationDepth, U"Interpolation depth (samples)", U"2000")
 	OK
 DO
 	CONVERT_EACH (PointProcess)
@@ -1386,7 +1396,7 @@ DIRECT (NEW1_PointProcesses_union) {
 }
 
 FORM (NEW_PointProcess_upto_IntensityTier, U"PointProcess: Up to IntensityTier", U"PointProcess: Up to IntensityTier...") {
-	POSITIVE4 (intensity, U"Intensity (dB)", U"70.0")
+	POSITIVE (intensity, U"Intensity (dB)", U"70.0")
 	OK
 DO
 	CONVERT_EACH (PointProcess)
@@ -1395,7 +1405,7 @@ DO
 }
 
 FORM (NEW_PointProcess_upto_PitchTier, U"PointProcess: Up to PitchTier", U"PointProcess: Up to PitchTier...") {
-	POSITIVE4 (frequency, U"Frequency (Hz)", U"190.0")
+	POSITIVE (frequency, U"Frequency (Hz)", U"190.0")
 	OK
 DO
 	CONVERT_EACH (PointProcess)
@@ -1404,7 +1414,7 @@ DO
 }
 
 FORM (NEW_PointProcess_upto_TextTier, U"PointProcess: Up to TextTier", U"PointProcess: Up to TextTier...") {
-	SENTENCE4 (text, U"Text", U"")
+	SENTENCE (text, U"Text", U"")
 	OK
 DO
 	CONVERT_EACH (PointProcess)
@@ -1413,8 +1423,8 @@ DO
 }
 
 FORM (MODIFY_PointProcess_voice, U"PointProcess: Fill unvoiced parts", nullptr) {
-	POSITIVEVAR (period, U"Period (s)", U"0.01")
-	POSITIVEVAR (maximumVoicedPeriod, U"Maximum voiced period (s)", U"0.02000000001")
+	POSITIVE (period, U"Period (s)", U"0.01")
+	POSITIVE (maximumVoicedPeriod, U"Maximum voiced period (s)", U"0.02000000001")
 	OK
 DO
 	MODIFY_EACH_WEAK (PointProcess)
@@ -1440,7 +1450,7 @@ DIRECT (MODIFY_Point_Sound_transplantDomain) {
 
 FORM (REAL_Point_Sound_getShimmer_local, U"PointProcess & Sound: Get shimmer (local)", U"PointProcess & Sound: Get shimmer (local)...") {
 	dia_PointProcess_getRangeProperty (fromTime, toTime, shortestPeriod, longestPeriod, maximumPeriodfactor)
-	POSITIVEVAR (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_TWO (PointProcess, Sound)
@@ -1451,7 +1461,7 @@ DO
 
 FORM (REAL_Point_Sound_getShimmer_local_dB, U"PointProcess & Sound: Get shimmer (local, dB)", U"PointProcess & Sound: Get shimmer (local, dB)...") {
 	dia_PointProcess_getRangeProperty (fromTime, toTime, shortestPeriod, longestPeriod, maximumPeriodfactor)
-	POSITIVEVAR (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_TWO (PointProcess, Sound)
@@ -1462,7 +1472,7 @@ DO
 
 FORM (REAL_Point_Sound_getShimmer_apq3, U"PointProcess & Sound: Get shimmer (apq3)", U"PointProcess & Sound: Get shimmer (apq3)...") {
 	dia_PointProcess_getRangeProperty (fromTime, toTime, shortestPeriod, longestPeriod, maximumPeriodfactor)
-	POSITIVEVAR (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_TWO (PointProcess, Sound)
@@ -1473,7 +1483,7 @@ DO
 
 FORM (REAL_Point_Sound_getShimmer_apq5, U"PointProcess & Sound: Get shimmer (apq)", U"PointProcess & Sound: Get shimmer (apq5)...") {
 	dia_PointProcess_getRangeProperty (fromTime, toTime, shortestPeriod, longestPeriod, maximumPeriodfactor)
-	POSITIVEVAR (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_TWO (PointProcess, Sound)
@@ -1484,7 +1494,7 @@ DO
 
 FORM (REAL_Point_Sound_getShimmer_apq11, U"PointProcess & Sound: Get shimmer (apq11)", U"PointProcess & Sound: Get shimmer (apq11)...") {
 	dia_PointProcess_getRangeProperty (fromTime, toTime, shortestPeriod, longestPeriod, maximumPeriodfactor)
-	POSITIVEVAR (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_TWO (PointProcess, Sound)
@@ -1495,7 +1505,7 @@ DO
 
 FORM (REAL_Point_Sound_getShimmer_dda, U"PointProcess & Sound: Get shimmer (dda)", U"PointProcess & Sound: Get shimmer (dda)...") {
 	dia_PointProcess_getRangeProperty (fromTime, toTime, shortestPeriod, longestPeriod, maximumPeriodfactor)
-	POSITIVEVAR (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
+	POSITIVE (maximumAmplitudeFactor, U"Maximum amplitude factor", U"1.6")
 	OK
 DO
 	NUMBER_TWO (PointProcess, Sound)
@@ -1521,11 +1531,11 @@ DIRECT (NEW1_PointProcess_Sound_to_AmplitudeTier_point) {
 }
 
 FORM (NEW1_PointProcess_Sound_to_Ltas, U"PointProcess & Sound: To Ltas", nullptr) {
-	POSITIVE4 (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
-	POSITIVE4 (bandwidth, U"Band width (Hz)", U"100.0")
-	REAL4 (shortestPeriod, U"Shortest period (s)", U"0.0001")
-	REAL4 (longestPeriod, U"Longest period (s)", U"0.02")
-	POSITIVE4 (maximumPeriodFactor, U"Maximum period factor", U"1.3")
+	POSITIVE (maximumFrequency, U"Maximum frequency (Hz)", U"5000.0")
+	POSITIVE (bandwidth, U"Band width (Hz)", U"100.0")
+	REAL (shortestPeriod, U"Shortest period (s)", U"0.0001")
+	REAL (longestPeriod, U"Longest period (s)", U"0.02")
+	POSITIVE (maximumPeriodFactor, U"Maximum period factor", U"1.3")
 	OK
 DO
 	CONVERT_TWO (PointProcess, Sound)
@@ -1535,10 +1545,10 @@ DO
 }
 
 FORM (NEW1_PointProcess_Sound_to_Ltas_harmonics, U"PointProcess & Sound: To Ltas (harmonics", nullptr) {
-	NATURAL4 (maximumHarmonic, U"Maximum harmonic", U"20")
-	REAL4 (shortestPeriod, U"Shortest period (s)", U"0.0001")
-	REAL4 (longestPeriod, U"Longest period (s)", U"0.02")
-	POSITIVE4 (maximumPeriodFactor, U"Maximum period factor", U"1.3")
+	NATURAL (maximumHarmonic, U"Maximum harmonic", U"20")
+	REAL (shortestPeriod, U"Shortest period (s)", U"0.0001")
+	REAL (longestPeriod, U"Longest period (s)", U"0.02")
+	POSITIVE (maximumPeriodFactor, U"Maximum period factor", U"1.3")
 	OK
 DO
 	CONVERT_TWO (PointProcess, Sound)
@@ -1548,8 +1558,8 @@ DO
 }
 
 FORM (NEW1_Sound_PointProcess_to_SoundEnsemble_correlate, U"Sound & PointProcess: To SoundEnsemble (correlate)", nullptr) {
-	REAL4 (fromTime, U"From time (s)", U"-0.1")
-	REAL4 (toTime, U"To time (s)", U"1.0")
+	REAL (fromTime, U"From time (s)", U"-0.1")
+	REAL (toTime, U"To time (s)", U"1.0")
 	OK
 DO
 	CONVERT_TWO (Sound, PointProcess)
@@ -1566,11 +1576,11 @@ DIRECT (NEW_SpectrumTier_downto_Table) {
 }
 
 FORM (GRAPHICS_old_SpectrumTier_draw, U"SpectrumTier: Draw", nullptr) {   // 2010-10-19
-	REAL4 (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REAL4 (toFrequency, U"right Frequency range (Hz)", U"10000.0")
-	REAL4 (fromPower, U"left Power range (dB)", U"20.0")
-	REAL4 (toPower, U"right Power range (dB)", U"80.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"10000.0")
+	REAL (fromPower, U"left Power range (dB)", U"20.0")
+	REAL (toPower, U"right Power range (dB)", U"80.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (SpectrumTier)
@@ -1580,13 +1590,13 @@ DO
 }
 
 FORM (GRAPHICS_SpectrumTier_draw, U"SpectrumTier: Draw", nullptr) {
-	REAL4 (fromFrequency, U"left Frequency range (Hz)", U"0.0")
-	REAL4 (toFrequency, U"right Frequency range (Hz)", U"10000.0")
-	REAL4 (fromPower, U"left Power range (dB)", U"20.0")
-	REAL4 (toPower, U"right Power range (dB)", U"80.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
+	REAL (toFrequency, U"right Frequency range (Hz)", U"10000.0")
+	REAL (fromPower, U"left Power range (dB)", U"20.0")
+	REAL (toPower, U"right Power range (dB)", U"80.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	LABEL (U"", U"")
-	OPTIONMENUSTR4 (drawingMethod, U"Drawing method", 1)
+	OPTIONMENUSTR (drawingMethod, U"Drawing method", 1)
 		OPTION (U"lines")
 		OPTION (U"speckles")
 		OPTION (U"lines and speckles")
@@ -1599,9 +1609,9 @@ DO_ALTERNATIVE (GRAPHICS_old_SpectrumTier_draw)
 }
 
 FORM (LIST_SpectrumTier_list, U"SpectrumTier: List", nullptr) {
-	BOOLEAN4 (includeIndexes, U"Include indexes", true)
-	BOOLEAN4 (includeFrequency, U"Include frequency", true)
-	BOOLEAN4 (includePowerDensity, U"Include power density", true)
+	BOOLEAN (includeIndexes, U"Include indexes", true)
+	BOOLEAN (includeFrequency, U"Include frequency", true)
+	BOOLEAN (includePowerDensity, U"Include power density", true)
 	OK
 DO
 	INFO_ONE (SpectrumTier)
@@ -1610,7 +1620,7 @@ DO
 }
 
 FORM (MODIFY_SpectrumTier_removePointsBelow, U"SpectrumTier: Remove points below", nullptr) {
-	REAL4 (removeAllPointsBelow, U"Remove all points below (dB)", U"40.0")
+	REAL (removeAllPointsBelow, U"Remove all points below (dB)", U"40.0")
 	OK
 DO
 	MODIFY_EACH (SpectrumTier)
@@ -1798,6 +1808,7 @@ void praat_Tiers_init () {
 	praat_addAction1 (classPointProcess, 0, U"Modify -", nullptr, 0, nullptr);
 		praat_TimeFunction_modify_init (classPointProcess);
 		praat_addAction1 (classPointProcess, 0, U"Add point...", nullptr, 1, MODIFY_PointProcess_addPoint);
+		praat_addAction1 (classPointProcess, 0, U"Add points...", nullptr, 1, MODIFY_PointProcess_addPoints);
 		praat_addAction1 (classPointProcess, 0, U"Remove point...", nullptr, 1, MODIFY_PointProcess_removePoint);
 		praat_addAction1 (classPointProcess, 0, U"Remove point near...", nullptr, 1, MODIFY_PointProcess_removePointNear);
 		praat_addAction1 (classPointProcess, 0, U"Remove points...", nullptr, 1, MODIFY_PointProcess_removePoints);
diff --git a/fon/praat_TimeFrameSampled.cpp b/fon/praat_TimeFrameSampled.cpp
index 3452976..246b703 100644
--- a/fon/praat_TimeFrameSampled.cpp
+++ b/fon/praat_TimeFrameSampled.cpp
@@ -27,7 +27,7 @@ DIRECT (INTEGER_TimeFrameSampled_getNumberOfFrames) {
 }
 
 FORM (REAL_TimeFrameSampled_getFrameFromTime, U"Get frame number from time", U"Get frame number from time...") {
-	REAL4 (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	NUMBER_ONE (Sampled)
@@ -42,7 +42,7 @@ DIRECT (REAL_TimeFrameSampled_getFrameLength) {
 }
 
 FORM (REAL_TimeFrameSampled_getTimeFromFrame, U"Get time from frame number", U"Get time from frame number...") {
-	NATURAL4 (frameNumber, U"Frame number", U"1")
+	NATURAL (frameNumber, U"Frame number", U"1")
 	OK
 DO
 	NUMBER_ONE (Sampled)
diff --git a/fon/praat_TimeFunction.cpp b/fon/praat_TimeFunction.cpp
index 65d3d16..94242f1 100644
--- a/fon/praat_TimeFunction.cpp
+++ b/fon/praat_TimeFunction.cpp
@@ -43,7 +43,7 @@ DIRECT (REAL_TimeFunction_getTotalDuration) {
 // MARK: Modify
 
 FORM (MODIFY_TimeFunction_shiftTimesBy, U"Shift times by", nullptr) {
-	REALVAR (shift, U"Shift (s)", U"0.5")
+	REAL (shift, U"Shift (s)", U"0.5")
 	OK
 DO
 	MODIFY_EACH (Function)
@@ -52,11 +52,11 @@ DO
 }
 
 FORM (MODIFY_TimeFunction_shiftTimesTo, U"Shift times to", nullptr) {
-	RADIOVAR (shift, U"Shift", 1)
+	RADIO (shift, U"Shift", 1)
 		OPTION (U"start time")
 		OPTION (U"centre time")
 		OPTION (U"end time")
-	REALVAR (toTime, U"To time (s)", U"0.0")
+	REAL (toTime, U"To time (s)", U"0.0")
 	OK
 DO
 	MODIFY_EACH (Function)
@@ -71,7 +71,7 @@ DIRECT (MODIFY_TimeFunction_shiftToZero) {
 }
 
 FORM (MODIFY_TimeFunction_scaleTimesBy, U"Scale times by", nullptr) {
-	POSITIVEVAR (factor, U"Factor", U"2.0")
+	POSITIVE (factor, U"Factor", U"2.0")
 	OK
 DO
 	MODIFY_EACH (Function)
@@ -80,8 +80,8 @@ DO
 }
 
 FORM (MODIFY_TimeFunction_scaleTimesTo, U"Scale times to", nullptr) {
-	REALVAR (newStartTime, U"New start time (s)", U"0.0")
-	REALVAR (newEndTime, U"New end time (s)", U"1.0")
+	REAL (newStartTime, U"New start time (s)", U"0.0")
+	REAL (newEndTime, U"New end time (s)", U"1.0")
 	OK
 DO
 	if (newStartTime >= newEndTime) Melder_throw (U"New end time should be greater than new start time.");
diff --git a/fon/praat_TimeFunction.h b/fon/praat_TimeFunction.h
index 55d608f..148c210 100644
--- a/fon/praat_TimeFunction.h
+++ b/fon/praat_TimeFunction.h
@@ -29,8 +29,8 @@
 	Prompting for fromTime and toTime on one row with two fields.
 */
 #define praat_TimeFunction_RANGE(fromTime,toTime) \
-	REALVAR (fromTime, U"left Time range (s)", U"0.0") \
-	REALVAR (toTime, U"right Time range (s)", U"0.0 (= all)")
+	REAL (fromTime, U"left Time range (s)", U"0.0") \
+	REAL (toTime, U"right Time range (s)", U"0.0 (= all)")
 
 /*
 	Action buttons.
diff --git a/fon/praat_TimeTier.cpp b/fon/praat_TimeTier.cpp
index 3aac761..8d65189 100644
--- a/fon/praat_TimeTier.cpp
+++ b/fon/praat_TimeTier.cpp
@@ -29,7 +29,7 @@ DIRECT (INTEGER_TimeTier_getNumberOfPoints) {
 }
 
 FORM (INTEGER_TimeTier_getLowIndexFromTime, U"Get low index", U"AnyTier: Get low index from time...") {
-	REALVAR (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	FIND_ONE (AnyTier)
@@ -38,7 +38,7 @@ DO
 }
 
 FORM (INTEGER_TimeTier_getHighIndexFromTime, U"Get high index", U"AnyTier: Get high index from time...") {
-	REALVAR (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	FIND_ONE (AnyTier)
@@ -47,7 +47,7 @@ DO
 }
 
 FORM (INTEGER_TimeTier_getNearestIndexFromTime, U"Get nearest index", U"AnyTier: Get nearest index from time...") {
-	REALVAR (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	FIND_ONE (AnyTier)
@@ -56,7 +56,7 @@ DO
 }
 
 FORM (REAL_TimeTier_getTimeFromIndex, U"Get time", nullptr /*"AnyTier: Get time from index..."*/) {
-	NATURALVAR (pointNumber, U"Point number", U"10")
+	NATURAL (pointNumber, U"Point number", U"10")
 	OK
 DO
 	FIND_ONE (AnyTier)
@@ -68,7 +68,7 @@ DO
 // MARK: Modify
 
 FORM (MODIFY_TimeTier_removePoint, U"Remove one point", U"AnyTier: Remove point...") {
-	NATURALVAR (pointNumber, U"Point number", U"1")
+	NATURAL (pointNumber, U"Point number", U"1")
 	OK
 DO
 	MODIFY_EACH (AnyTier)
@@ -77,7 +77,7 @@ DO
 }
 
 FORM (MODIFY_TimeTier_removePointNear, U"Remove one point", U"AnyTier: Remove point near...") {
-	REALVAR (time, U"Time (s)", U"0.5")
+	REAL (time, U"Time (s)", U"0.5")
 	OK
 DO
 	MODIFY_EACH (AnyTier)
@@ -86,8 +86,8 @@ DO
 }
 
 FORM (MODIFY_TimeTier_removePointsBetween, U"Remove points", U"AnyTier: Remove points between...") {
-	REALVAR (fromTime, U"left Time range (s)", U"0.0")
-	REALVAR (toTime, U"right Time range (s)", U"1.0")
+	REAL (fromTime, U"left Time range (s)", U"0.0")
+	REAL (toTime, U"right Time range (s)", U"1.0")
 	OK
 DO
 	MODIFY_EACH (AnyTier)
diff --git a/fon/praat_TimeVector.h b/fon/praat_TimeVector.h
index 8f99fd7..b257eb8 100644
--- a/fon/praat_TimeVector.h
+++ b/fon/praat_TimeVector.h
@@ -2,7 +2,7 @@
 #define _praat_TimeVector_h_
 /* praat_TimeVector.h
  *
- * Copyright (C) 2016 Paul Boersma
+ * Copyright (C) 2016,2017 Paul Boersma
  *
  * This code is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -30,8 +30,8 @@
 */
 
 #define praat_TimeVector_INTERPOLATED_VALUE(time,interpolation) \
-	REALVAR (time, U"Time (s)", U"0.5") \
-	RADIOVARx (interpolation, U"Interpolation", 3, 0) \
+	REAL (time, U"Time (s)", U"0.5") \
+	RADIOx (interpolation, U"Interpolation", 3, 0) \
 		RADIOBUTTON (U"Nearest") \
 		RADIOBUTTON (U"Linear") \
 		RADIOBUTTON (U"Cubic") \
@@ -40,7 +40,7 @@
 
 #define praat_TimeVector_INTERPOLATED_EXTREMUM(fromTime,toTime,interpolation) \
 	praat_TimeFunction_RANGE (fromTime, toTime) \
-	RADIOVARx (interpolation, U"Interpolation", 2, 0) \
+	RADIOx (interpolation, U"Interpolation", 2, 0) \
 		RADIOBUTTON (U"None") \
 		RADIOBUTTON (U"Parabolic") \
 		RADIOBUTTON (U"Cubic") \
diff --git a/gram/praat_gram.cpp b/gram/praat_gram.cpp
index d2bef27..fb8e5d6 100644
--- a/gram/praat_gram.cpp
+++ b/gram/praat_gram.cpp
@@ -34,25 +34,25 @@
 
 #define UiForm_addNetworkFields  \
 	LABEL (U"", U"Activity spreading settings:") \
-	REAL4 (spreadingRate, U"Spreading rate", U"0.01") \
-	OPTIONMENU_ENUM4 (activityClippingRule, U"Activity clipping rule", kNetwork_activityClippingRule, DEFAULT) \
-	REAL4 (minimumActivity, U"left Activity range", U"0.0") \
-	REAL4 (maximumActivity, U"right Activity range", U"1.0") \
-	REAL4 (activityLeak, U"Activity leak", U"1.0") \
+	REAL (spreadingRate, U"Spreading rate", U"0.01") \
+	OPTIONMENU_ENUM (activityClippingRule, U"Activity clipping rule", kNetwork_activityClippingRule, DEFAULT) \
+	REAL (minimumActivity, U"left Activity range", U"0.0") \
+	REAL (maximumActivity, U"right Activity range", U"1.0") \
+	REAL (activityLeak, U"Activity leak", U"1.0") \
 	LABEL (U"", U"Weight update settings:") \
-	REAL4 (learningRate, U"Learning rate", U"0.1") \
-	REAL4 (minimumWeight, U"left Weight range", U"-1.0") \
-	REAL4 (maximumWeight, U"right Weight range", U"1.0") \
-	REAL4 (weightLeak, U"Weight leak", U"0.0")
+	REAL (learningRate, U"Learning rate", U"0.1") \
+	REAL (minimumWeight, U"left Weight range", U"-1.0") \
+	REAL (maximumWeight, U"right Weight range", U"1.0") \
+	REAL (weightLeak, U"Weight leak", U"0.0")
 
 FORM (NEW1_Create_empty_Network, U"Create empty Network", nullptr) {
-	WORD4 (name, U"Name", U"network")
+	WORD (name, U"Name", U"network")
 	UiForm_addNetworkFields
 	LABEL (U"", U"World coordinates:")
-	REAL4 (fromX, U"left x range", U"0.0")
-	REAL4 (toX, U"right x range", U"10.0")
-	REAL4 (fromY, U"left y range", U"0.0")
-	REAL4 (toY, U"right y range", U"10.0")
+	REAL (fromX, U"left x range", U"0.0")
+	REAL (toX, U"right x range", U"10.0")
+	REAL (fromY, U"left y range", U"0.0")
+	REAL (toY, U"right y range", U"10.0")
 	OK
 DO
 	CREATE_ONE
@@ -66,12 +66,12 @@ DO
 FORM (NEW1_Create_rectangular_Network, U"Create rectangular Network", nullptr) {
 	UiForm_addNetworkFields
 	LABEL (U"", U"Structure settings:")
-	NATURAL4 (numberOfRows, U"Number of rows", U"10")
-	NATURAL4 (numberOfColumns, U"Number of columns", U"10")
-	BOOLEAN4 (bottomRowClamped, U"Bottom row clamped", 1)
+	NATURAL (numberOfRows, U"Number of rows", U"10")
+	NATURAL (numberOfColumns, U"Number of columns", U"10")
+	BOOLEAN (bottomRowClamped, U"Bottom row clamped", 1)
 	LABEL (U"", U"Initial state settings:")
-	REAL4 (minimumInitialWeight, U"left Initial weight range", U"-0.1")
-	REAL4 (maximumInitialWeight, U"right Initial weight range", U"0.1")
+	REAL (minimumInitialWeight, U"left Initial weight range", U"-0.1")
+	REAL (maximumInitialWeight, U"right Initial weight range", U"0.1")
 	OK
 DO
 	CREATE_ONE
@@ -85,12 +85,12 @@ DO
 FORM (NEW1_Create_rectangular_Network_vertical, U"Create rectangular Network (vertical)", nullptr) {
 	UiForm_addNetworkFields
 	LABEL (U"", U"Structure settings:")
-	NATURAL4 (numberOfRows, U"Number of rows", U"10")
-	NATURAL4 (numberOfColumns, U"Number of columns", U"10")
-	BOOLEAN4 (bottomRowClamped, U"Bottom row clamped", 1)
+	NATURAL (numberOfRows, U"Number of rows", U"10")
+	NATURAL (numberOfColumns, U"Number of columns", U"10")
+	BOOLEAN (bottomRowClamped, U"Bottom row clamped", 1)
 	LABEL (U"", U"Initial state settings:")
-	REAL4 (minimumInitialWeight, U"left Initial weight range", U"-0.1")
-	REAL4 (maximumInitialWeight, U"right Initial weight range", U"0.1")
+	REAL (minimumInitialWeight, U"left Initial weight range", U"-0.1")
+	REAL (maximumInitialWeight, U"right Initial weight range", U"0.1")
 	OK
 DO
 	CREATE_ONE
@@ -104,7 +104,7 @@ DO
 // MARK: Draw
 
 FORM (GRAPHICS_Network_draw, U"Draw Network", nullptr) {
-	BOOLEAN4 (useColour, U"Use colour", true)
+	BOOLEAN (useColour, U"Use colour", true)
 	OK
 DO
 	GRAPHICS_EACH (Network)
@@ -115,16 +115,16 @@ DO
 // MARK: Tabulate
 
 FORM (LIST_Network_listNodes, U"Network: List nodes", nullptr) {
-	INTEGER4 (fromNodeNumber, U"From node number", U"1")
-	INTEGER4 (toNodeNumber, U"To node number", U"1000")
-	BOOLEAN4 (includeNodeNumbers, U"Include node numbers", true)
-	BOOLEAN4 (includeX, U"Include x", false)
-	BOOLEAN4 (includeY, U"Include y", false)
-	INTEGER4 (positionDecimals, U"Position decimals", U"6")
-	BOOLEAN4 (includeClamped, U"Include clamped", false)
-	BOOLEAN4 (includeActivity, U"Include activity", true)
-	BOOLEAN4 (includeExcitation, U"Include excitation", false)
-	INTEGER4 (activityDecimals, U"Activity decimals", U"6")
+	INTEGER (fromNodeNumber, U"From node number", U"1")
+	INTEGER (toNodeNumber, U"To node number", U"1000")
+	BOOLEAN (includeNodeNumbers, U"Include node numbers", true)
+	BOOLEAN (includeX, U"Include x", false)
+	BOOLEAN (includeY, U"Include y", false)
+	INTEGER (positionDecimals, U"Position decimals", U"6")
+	BOOLEAN (includeClamped, U"Include clamped", false)
+	BOOLEAN (includeActivity, U"Include activity", true)
+	BOOLEAN (includeExcitation, U"Include excitation", false)
+	INTEGER (activityDecimals, U"Activity decimals", U"6")
 	OK
 DO
 	INFO_ONE (Network)
@@ -135,16 +135,16 @@ DO
 }
 
 FORM (NEW_Network_nodes_downto_Table, U"Network: Nodes down to Table", nullptr) {
-	INTEGER4 (fromNodeNumber, U"From node number", U"1")
-	INTEGER4 (toNodeNumber, U"To node number", U"1000")
-	BOOLEAN4 (includeNodeNumbers, U"Include node numbers", true)
-	BOOLEAN4 (includeX, U"Include x", false)
-	BOOLEAN4 (includeY, U"Include y", false)
-	INTEGER4 (positionDecimals, U"Position decimals", U"6")
-	BOOLEAN4 (includeClamped, U"Include clamped", false)
-	BOOLEAN4 (includeActivity, U"Include activity", true)
-	BOOLEAN4 (includeExcitation, U"Include excitation", false)
-	INTEGER4 (activityDecimals, U"Activity decimals", U"6")
+	INTEGER (fromNodeNumber, U"From node number", U"1")
+	INTEGER (toNodeNumber, U"To node number", U"1000")
+	BOOLEAN (includeNodeNumbers, U"Include node numbers", true)
+	BOOLEAN (includeX, U"Include x", false)
+	BOOLEAN (includeY, U"Include y", false)
+	INTEGER (positionDecimals, U"Position decimals", U"6")
+	BOOLEAN (includeClamped, U"Include clamped", false)
+	BOOLEAN (includeActivity, U"Include activity", true)
+	BOOLEAN (includeExcitation, U"Include excitation", false)
+	INTEGER (activityDecimals, U"Activity decimals", U"6")
 	OK
 DO
 	CONVERT_EACH (Network)
@@ -157,7 +157,7 @@ DO
 // MARK: Query
 
 FORM (REAL_Network_getActivity, U"Network: Get activity", nullptr) {
-	NATURAL4 (node, U"Node", U"1")
+	NATURAL (node, U"Node", U"1")
 	OK
 DO
 	NUMBER_ONE (Network)
@@ -166,7 +166,7 @@ DO
 }
 
 FORM (REAL_Network_getWeight, U"Network: Get weight", nullptr) {
-	NATURAL4 (connection, U"Connection", U"1")
+	NATURAL (connection, U"Connection", U"1")
 	OK
 DO
 	NUMBER_ONE (Network)
@@ -177,10 +177,10 @@ DO
 // MARK: Modify
 
 FORM (MODIFY_Network_addConnection, U"Network: Add connection", nullptr) {
-	NATURAL4 (fromNode, U"From node", U"1")
-	NATURAL4 (toNode, U"To node", U"2")
-	REAL4 (weight, U"Weight", U"0.0")
-	REAL4 (plasticity, U"Plasticity", U"1.0")
+	NATURAL (fromNode, U"From node", U"1")
+	NATURAL (toNode, U"To node", U"2")
+	REAL (weight, U"Weight", U"0.0")
+	REAL (plasticity, U"Plasticity", U"1.0")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -189,10 +189,10 @@ DO
 }
 
 FORM (MODIFY_Network_addNode, U"Network: Add node", nullptr) {
-	REAL4 (x, U"x", U"5.0")
-	REAL4 (y, U"y", U"5.0")
-	REAL4 (activity, U"Activity", U"0.0")
-	BOOLEAN4 (clamping, U"Clamping", false)
+	REAL (x, U"x", U"5.0")
+	REAL (y, U"y", U"5.0")
+	REAL (activity, U"Activity", U"0.0")
+	BOOLEAN (clamping, U"Clamping", false)
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -201,8 +201,8 @@ DO
 }
 
 FORM (MODIFY_Network_normalizeActivities, U"Network: Normalize activities", nullptr) {
-	INTEGER4 (fromNode, U"From node", U"1")
-	INTEGER4 (toNode, U"To node", U"0 (= all)")
+	INTEGER (fromNode, U"From node", U"1")
+	INTEGER (toNode, U"To node", U"0 (= all)")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -211,11 +211,11 @@ DO
 }
 
 FORM (MODIFY_Network_normalizeWeights, U"Network: Normalize weights", nullptr) {
-	INTEGER4 (fromNode, U"From node", U"1")
-	INTEGER4 (toNode, U"To node", U"0 (= all)")
-	INTEGER4 (fromIncomingNode, U"From incoming node", U"1")
-	INTEGER4 (toIncomingNode, U"To incoming node", U"10")
-	REAL4 (newSum, U"New sum", U"1.0")
+	INTEGER (fromNode, U"From node", U"1")
+	INTEGER (toNode, U"To node", U"0 (= all)")
+	INTEGER (fromIncomingNode, U"From incoming node", U"1")
+	INTEGER (toIncomingNode, U"To incoming node", U"10")
+	REAL (newSum, U"New sum", U"1.0")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -224,8 +224,8 @@ DO
 }
 
 FORM (MODIFY_Network_setActivity, U"Network: Set activity", nullptr) {
-	NATURAL4 (node, U"Node", U"1")
-	REAL4 (activity, U"Activity", U"1.0")
+	NATURAL (node, U"Node", U"1")
+	REAL (activity, U"Activity", U"1.0")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -234,16 +234,16 @@ DO
 }
 
 FORM (MODIFY_Network_setActivityClippingRule, U"Network: Set activity clipping rule", nullptr) {
-	RADIO_ENUM (U"Activity clipping rule", kNetwork_activityClippingRule, DEFAULT)
+	RADIO_ENUM (activityClippingRule, U"Activity clipping rule", kNetwork_activityClippingRule, DEFAULT)
 	OK
 DO
 	MODIFY_EACH (Network)
-		Network_setActivityClippingRule (me, GET_ENUM (kNetwork_activityClippingRule, U"Activity clipping rule"));
+		Network_setActivityClippingRule (me, activityClippingRule);
 	MODIFY_EACH_END
 }
 
 FORM (MODIFY_Network_setActivityLeak, U"Network: Set activity leak", nullptr) {
-	REAL4 (activityLeak, U"Activity leak", U"1.0")
+	REAL (activityLeak, U"Activity leak", U"1.0")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -252,8 +252,8 @@ DO
 }
 
 FORM (MODIFY_Network_setClamping, U"Network: Set clamping", nullptr) {
-	NATURAL4 (node, U"Node", U"1")
-	BOOLEAN4 (clamping, U"Clamping", true)
+	NATURAL (node, U"Node", U"1")
+	BOOLEAN (clamping, U"Clamping", true)
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -262,7 +262,7 @@ DO
 }
 
 FORM (MODIFY_Network_setInstar, U"Network: Set instar", nullptr) {
-	REAL4 (instar, U"Instar", U"0.0")
+	REAL (instar, U"Instar", U"0.0")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -271,7 +271,7 @@ DO
 }
 
 FORM (MODIFY_Network_setWeightLeak, U"Network: Set weight leak", nullptr) {
-	REAL4 (weightLeak, U"Weight leak", U"0.0")
+	REAL (weightLeak, U"Weight leak", U"0.0")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -280,7 +280,7 @@ DO
 }
 
 FORM (MODIFY_Network_setOutstar, U"Network: Set outstar", nullptr) {
-	REAL4 (outstar, U"Outstar", U"0.0")
+	REAL (outstar, U"Outstar", U"0.0")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -289,7 +289,7 @@ DO
 }
 
 FORM (MODIFY_Network_setShunting, U"Network: Set shunting", nullptr) {
-	REAL4 (shunting, U"Shunting", U"1.0")
+	REAL (shunting, U"Shunting", U"1.0")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -298,8 +298,8 @@ DO
 }
 
 FORM (MODIFY_Network_setWeight, U"Network: Set weight", nullptr) {
-	NATURAL4 (connection, U"Connection", U"1")
-	REAL4 (weight, U"Weight", U"1.0")
+	NATURAL (connection, U"Connection", U"1")
+	REAL (weight, U"Weight", U"1.0")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -308,7 +308,7 @@ DO
 }
 
 FORM (MODIFY_Network_spreadActivities, U"Network: Spread activities", nullptr) {
-	NATURAL4 (numberOfSteps, U"Number of steps", U"20")
+	NATURAL (numberOfSteps, U"Number of steps", U"20")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -323,8 +323,8 @@ DIRECT (MODIFY_Network_updateWeights) {
 }
 
 FORM (MODIFY_Network_zeroActivities, U"Network: Zero activities", nullptr) {
-	INTEGER4 (fromNode, U"From node", U"1")
-	INTEGER4 (toNode, U"To node", U"0 (= all)")
+	INTEGER (fromNode, U"From node", U"1")
+	INTEGER (toNode, U"To node", U"0 (= all)")
 	OK
 DO
 	MODIFY_EACH (Network)
@@ -359,10 +359,10 @@ DIRECT (NEW1_Create_NPA_distribution) {
 }
 
 FORM (NEW1_Create_tongue_root_grammar, U"Create tongue-root grammar", U"Create tongue-root grammar...") {
-	RADIO4 (constraintSet, U"Constraint set", 1)
+	RADIO (constraintSet, U"Constraint set", 1)
 		RADIOBUTTON (U"Five")
 		RADIOBUTTON (U"Nine")
-	RADIO4 (ranking, U"Ranking", 3)
+	RADIO (ranking, U"Ranking", 3)
 		RADIOBUTTON (U"Equal")
 		RADIOBUTTON (U"Random")
 		RADIOBUTTON (U"Infant")
@@ -375,23 +375,23 @@ DO
 }
 
 FORM (NEW1_Create_metrics_grammar, U"Create metrics grammar", nullptr) {
-	OPTIONMENU4 (initialRanking, U"Initial ranking", 1)
+	OPTIONMENU (initialRanking, U"Initial ranking", 1)
 		OPTION (U"Equal")
 		OPTION (U"Foot form high")
 		OPTION (U"WSP high")
-	OPTIONMENU4 (trochaicityConstraint, U"Trochaicity constraint", 1)
+	OPTIONMENU (trochaicityConstraint, U"Trochaicity constraint", 1)
 		OPTION (U"FtNonfinal")
 		OPTION (U"Trochaic")
-	BOOLEAN4 (includeFootBimoraic, U"Include FootBimoraic", false)
-	BOOLEAN4 (includeFootBisyllabic, U"Include FootBisyllabic", false)
-	BOOLEAN4 (includePeripheral, U"Include Peripheral", false)
-	OPTIONMENU4 (nonfinalityConstraint, U"Nonfinality constraint", 1)
+	BOOLEAN (includeFootBimoraic, U"Include FootBimoraic", false)
+	BOOLEAN (includeFootBisyllabic, U"Include FootBisyllabic", false)
+	BOOLEAN (includePeripheral, U"Include Peripheral", false)
+	OPTIONMENU (nonfinalityConstraint, U"Nonfinality constraint", 1)
 		OPTION (U"Nonfinal")
 		OPTION (U"MainNonfinal")
 		OPTION (U"HeadNonfinal")
-	BOOLEAN4 (overtFormsHaveSecondaryStress, U"Overt forms have secondary stress", true)
-	BOOLEAN4 (includeClashAndLapse, U"Include *Clash and *Lapse", false)
-	BOOLEAN4 (includeCodas, U"Include codas", false)
+	BOOLEAN (overtFormsHaveSecondaryStress, U"Overt forms have secondary stress", true)
+	BOOLEAN (includeClashAndLapse, U"Include *Clash and *Lapse", false)
+	BOOLEAN (includeCodas, U"Include codas", false)
 	OK
 DO
 	CREATE_ONE
@@ -429,7 +429,7 @@ DIRECT (WINDOW_OTGrammar_viewAndEdit) {
 // MARK: Draw
 
 FORM (GRAPHICS_OTGrammar_drawTableau, U"Draw tableau", U"OT learning") {
-	SENTENCE4 (inputString, U"Input string", U"")
+	SENTENCE (inputString, U"Input string", U"")
 	OK
 DO
 	GRAPHICS_EACH (OTGrammar)
@@ -438,7 +438,7 @@ DO
 }
 
 FORM (GRAPHICS_OTGrammar_drawTableau_narrowly, U"Draw tableau (narrowly)", U"OT learning") {
-	SENTENCE4 (inputString, U"Input string", U"")
+	SENTENCE (inputString, U"Input string", U"")
 	OK
 DO
 	GRAPHICS_EACH (OTGrammar)
@@ -455,7 +455,7 @@ DIRECT (INTEGER_OTGrammar_getNumberOfConstraints) {
 }
 
 FORM (STRING_OTGrammar_getConstraint, U"Get constraint name", nullptr) {
-	NATURAL4 (constraintNumber, U"Constraint number", U"1")
+	NATURAL (constraintNumber, U"Constraint number", U"1")
 	OK
 DO
 	STRING_ONE (OTGrammar)
@@ -466,7 +466,7 @@ DO
 }
 
 FORM (REAL_OTGrammar_getRankingValue, U"Get ranking value", nullptr) {
-	NATURAL4 (constraintNumber, U"Constraint number", U"1")
+	NATURAL (constraintNumber, U"Constraint number", U"1")
 	OK
 DO
 	NUMBER_ONE (OTGrammar)
@@ -477,7 +477,7 @@ DO
 }
 
 FORM (REAL_OTGrammar_getDisharmony, U"Get disharmony", nullptr) {
-	NATURAL4 (constraintNumber, U"Constraint number", U"1")
+	NATURAL (constraintNumber, U"Constraint number", U"1")
 	OK
 DO
 	NUMBER_ONE (OTGrammar)
@@ -494,7 +494,7 @@ DIRECT (INTEGER_OTGrammar_getNumberOfTableaus) {
 }
 
 FORM (STRING_OTGrammar_getInput, U"Get input", nullptr) {
-	NATURAL4 (tableauNumber, U"Tableau number", U"1")
+	NATURAL (tableauNumber, U"Tableau number", U"1")
 	OK
 DO
 	STRING_ONE (OTGrammar)
@@ -505,7 +505,7 @@ DO
 }
 
 FORM (INTEGER_OTGrammar_getNumberOfCandidates, U"Get number of candidates", nullptr) {
-	NATURAL4 (tableauNumber, U"Tableau number", U"1")
+	NATURAL (tableauNumber, U"Tableau number", U"1")
 	OK
 DO
 	NUMBER_ONE (OTGrammar)
@@ -516,8 +516,8 @@ DO
 }
 
 FORM (STRING_OTGrammar_getCandidate, U"Get candidate", nullptr) {
-	NATURAL4 (tableauNumber, U"Tableau number", U"1")
-	NATURAL4 (candidateNumber, U"Candidate number", U"1")
+	NATURAL (tableauNumber, U"Tableau number", U"1")
+	NATURAL (candidateNumber, U"Candidate number", U"1")
 	OK
 DO
 	STRING_ONE (OTGrammar)
@@ -531,9 +531,9 @@ DO
 }
 
 FORM (INTEGER_OTGrammar_getNumberOfViolations, U"Get number of violations", nullptr) {
-	NATURAL4 (tableauNumber, U"Tableau number", U"1")
-	NATURAL4 (candidateNumber, U"Candidate number", U"1")
-	NATURAL4 (constraintNumber, U"Constraint number", U"1")
+	NATURAL (tableauNumber, U"Tableau number", U"1")
+	NATURAL (candidateNumber, U"Candidate number", U"1")
+	NATURAL (constraintNumber, U"Constraint number", U"1")
 	OK
 DO
 	NUMBER_ONE (OTGrammar)
@@ -550,7 +550,7 @@ DO
 // MARK: Query (parse)
 
 FORM (INTEGER_OTGrammar_getWinner, U"Get winner", nullptr) {
-	NATURAL4 (tableauNumber, U"Tableau number", U"1")
+	NATURAL (tableauNumber, U"Tableau number", U"1")
 	OK
 DO
 	NUMBER_ONE (OTGrammar)
@@ -561,10 +561,10 @@ DO
 }
 
 FORM (INTEGER_OTGrammar_compareCandidates, U"Compare candidates", nullptr) {
-	NATURAL4 (tableauNumber1, U"Tableau number 1", U"1")
-	NATURAL4 (candidateNumber1, U"Candidate number 1", U"1")
-	NATURAL4 (tableauNumber2, U"Tableau number 2", U"1")
-	NATURAL4 (candidateNumber2, U"Candidate number 2", U"2")
+	NATURAL (tableauNumber1, U"Tableau number 1", U"1")
+	NATURAL (candidateNumber1, U"Candidate number 1", U"1")
+	NATURAL (tableauNumber2, U"Tableau number 2", U"1")
+	NATURAL (candidateNumber2, U"Candidate number 2", U"2")
 	OK
 DO
 	NUMBER_ONE (OTGrammar)
@@ -582,7 +582,7 @@ DO
 }
 
 FORM (INTEGER_OTGrammar_getNumberOfOptimalCandidates, U"Get number of optimal candidates", nullptr) {
-	NATURAL4 (tableauNumber, U"Tableau number", U"1")
+	NATURAL (tableauNumber, U"Tableau number", U"1")
 	OK
 DO
 	NUMBER_ONE (OTGrammar)
@@ -593,8 +593,8 @@ DO
 }
 
 FORM (BOOLEAN_OTGrammar_isCandidateGrammatical, U"Is candidate grammatical?", nullptr) {
-	NATURAL4 (tableauNumber, U"Tableau number", U"1")
-	NATURAL4 (candidateNumber, U"Candidate number", U"1")
+	NATURAL (tableauNumber, U"Tableau number", U"1")
+	NATURAL (candidateNumber, U"Candidate number", U"1")
 	OK
 DO
 	NUMBER_ONE (OTGrammar)
@@ -607,8 +607,8 @@ DO
 }
 
 FORM (BOOLEAN_OTGrammar_isCandidateSinglyGrammatical, U"Is candidate singly grammatical?", nullptr) {
-	NATURAL4 (tableauNumber, U"Tableau number", U"1")
-	NATURAL4 (candidateNumber, U"Candidate number", U"1")
+	NATURAL (tableauNumber, U"Tableau number", U"1")
+	NATURAL (candidateNumber, U"Candidate number", U"1")
 	OK
 DO
 	NUMBER_ONE (OTGrammar)
@@ -621,7 +621,7 @@ DO
 }
 
 FORM (STRING_OTGrammar_getInterpretiveParse, U"OTGrammar: Interpretive parse", nullptr) {
-	SENTENCE4 (partialOutput, U"Partial output", U"")
+	SENTENCE (partialOutput, U"Partial output", U"")
 	OK
 DO
 	FIND_ONE (OTGrammar)
@@ -633,7 +633,7 @@ DO
 }
 
 FORM (BOOLEAN_OTGrammar_isPartialOutputGrammatical, U"Is partial output grammatical?", nullptr) {
-	SENTENCE4 (partialOutput, U"Partial output", U"")
+	SENTENCE (partialOutput, U"Partial output", U"")
 	OK
 DO
 	NUMBER_ONE (OTGrammar)
@@ -642,7 +642,7 @@ DO
 }
 
 FORM (BOOLEAN_OTGrammar_isPartialOutputSinglyGrammatical, U"Is partial output singly grammatical?", nullptr) {
-	SENTENCE4 (partialOutput, U"Partial output", U"")
+	SENTENCE (partialOutput, U"Partial output", U"")
 	OK
 DO
 	NUMBER_ONE (OTGrammar)
@@ -653,7 +653,7 @@ DO
 // MARK: -
 
 FORM (NEW_OTGrammar_generateInputs, U"Generate inputs", U"OTGrammar: Generate inputs...") {
-	NATURAL4 (numberOfTrials, U"Number of trials", U"1000")
+	NATURAL (numberOfTrials, U"Number of trials", U"1000")
 	OK
 DO
 	CONVERT_EACH (OTGrammar)
@@ -682,7 +682,7 @@ END }
 // MARK: Evaluate
 
 FORM (MODIFY_OTGrammar_evaluate, U"OTGrammar: Evaluate", nullptr) {
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
 	OK
 DO
 	MODIFY_EACH (OTGrammar)
@@ -691,8 +691,8 @@ DO
 }
 
 FORM (STRING_MODIFY_OTGrammar_inputToOutput, U"OTGrammar: Input to output", U"OTGrammar: Input to output...") {
-	SENTENCE4 (inputForm, U"Input form", U"")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
+	SENTENCE (inputForm, U"Input form", U"")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
 	OK
 DO
 	FIND_ONE (OTGrammar)
@@ -704,9 +704,9 @@ DO
 }
 
 FORM (NEW1_MODIFY_OTGrammar_inputToOutputs, U"OTGrammar: Input to outputs", U"OTGrammar: Input to outputs...") {
-	NATURAL4 (trials, U"Trials", U"1000")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	SENTENCE4 (inputForm, U"Input form", U"")
+	NATURAL (trials, U"Trials", U"1000")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	SENTENCE (inputForm, U"Input form", U"")
 	OK
 DO
 	FIND_ONE (OTGrammar)
@@ -717,8 +717,8 @@ DO
 }
 
 FORM (NEW_MODIFY_OTGrammar_to_Distributions, U"OTGrammar: Compute output distributions", U"OTGrammar: To output Distributions...") {
-	NATURAL4 (trialsPerInput, U"Trials per input", U"100000")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
+	NATURAL (trialsPerInput, U"Trials per input", U"100000")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
 	OK
 DO
 	LOOP {
@@ -735,8 +735,8 @@ DO
 END }
 
 FORM (NEW_MODIFY_OTGrammar_to_PairDistribution, U"OTGrammar: Compute output distributions", nullptr) {
-	NATURAL4 (trialsPerInput, U"Trials per input", U"100000")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
+	NATURAL (trialsPerInput, U"Trials per input", U"100000")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
 	OK
 DO
 	LOOP try {
@@ -753,9 +753,9 @@ END }
 // MARK: Modify ranking
 
 FORM (MODIFY_OTGrammar_setRanking, U"OTGrammar: Set ranking", nullptr) {
-	NATURAL4 (constraintNumber, U"Constraint number", U"1")
-	REAL4 (ranking, U"Ranking", U"100.0")
-	REAL4 (disharmony, U"Disharmony", U"100.0")
+	NATURAL (constraintNumber, U"Constraint number", U"1")
+	REAL (ranking, U"Ranking", U"100.0")
+	REAL (disharmony, U"Disharmony", U"100.0")
 	OK
 DO
 	MODIFY_EACH (OTGrammar)
@@ -764,7 +764,7 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_resetAllRankings, U"OTGrammar: Reset all rankings", nullptr) {
-	REAL4 (ranking, U"Ranking", U"100.0")
+	REAL (ranking, U"Ranking", U"100.0")
 	OK
 DO
 	MODIFY_EACH (OTGrammar)
@@ -773,8 +773,8 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_resetToRandomRanking, U"OTGrammar: Reset to random ranking", nullptr) {
-	REAL4 (mean, U"Mean", U"10.0")
-	POSITIVE4 (standardDeviation, U"Standard deviation", U"1e-4")
+	REAL (mean, U"Mean", U"10.0")
+	POSITIVE (standardDeviation, U"Standard deviation", U"1e-4")
 	OK
 DO
 	MODIFY_EACH (OTGrammar)
@@ -783,8 +783,8 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_resetToRandomTotalRanking, U"OTGrammar: Reset to random total ranking", nullptr) {
-	REAL4 (maximumRanking, U"Maximum ranking", U"100.0")
-	POSITIVE4 (rankingDistance, U"Ranking distance", U"1.0")
+	REAL (maximumRanking, U"Maximum ranking", U"100.0")
+	POSITIVE (rankingDistance, U"Ranking distance", U"1.0")
 	OK
 DO
 	MODIFY_EACH (OTGrammar)
@@ -793,13 +793,13 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_learnOne, U"OTGrammar: Learn one", U"OTGrammar: Learn one...") {
-	SENTENCE4 (inputString, U"Input string", U"")
-	SENTENCE4 (outputString, U"Output string", U"")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	OPTIONMENU_ENUM4 (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
-	REAL4 (plasticity, U"Plasticity", U"0.1")
-	REAL4 (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
-	BOOLEAN4 (honourLocalRankings, U"Honour local rankings", 1)
+	SENTENCE (inputString, U"Input string", U"")
+	SENTENCE (outputString, U"Output string", U"")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	OPTIONMENU_ENUM (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
+	REAL (plasticity, U"Plasticity", U"0.1")
+	REAL (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
+	BOOLEAN (honourLocalRankings, U"Honour local rankings", 1)
 	OK
 DO
 	MODIFY_EACH_WEAK (OTGrammar)
@@ -811,13 +811,13 @@ DO
 
 FORM (MODIFY_OTGrammar_learnOneFromPartialOutput, U"OTGrammar: Learn one from partial adult output", nullptr) {
 	LABEL (U"", U"Partial adult surface form (e.g. overt form):")
-	SENTENCE4 (partialOutput, U"Partial output", U"")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	OPTIONMENU_ENUM4 (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
-	REAL4 (plasticity, U"Plasticity", U"0.1")
-	REAL4 (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
-	BOOLEAN4 (honourLocalRankings, U"Honour local rankings", 1)
-	NATURAL4 (numberOfChews, U"Number of chews", U"1")
+	SENTENCE (partialOutput, U"Partial output", U"")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	OPTIONMENU_ENUM (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
+	REAL (plasticity, U"Plasticity", U"0.1")
+	REAL (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
+	BOOLEAN (honourLocalRankings, U"Honour local rankings", 1)
+	NATURAL (numberOfChews, U"Number of chews", U"1")
 	OK
 DO
 	MODIFY_EACH_WEAK (OTGrammar)
@@ -830,7 +830,7 @@ DO
 // MARK: Modify behaviour
 
 FORM (MODIFY_OTGrammar_setDecisionStrategy, U"OTGrammar: Set decision strategy", nullptr) {
-	RADIO_ENUM4 (decisionStrategy, U"Decision strategy", kOTGrammar_decisionStrategy, DEFAULT)
+	RADIO_ENUM (decisionStrategy, U"Decision strategy", kOTGrammar_decisionStrategy, DEFAULT)
 OK
 	FIND_ONE (OTGrammar)
 		SET_ENUM (U"Decision strategy", kOTGrammar_decisionStrategy, my decisionStrategy);
@@ -841,7 +841,7 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_setLeak, U"OTGrammar: Set leak", nullptr) {
-	REAL4 (leak, U"Leak", U"0.0")
+	REAL (leak, U"Leak", U"0.0")
 OK
 	FIND_ONE (OTGrammar)
 		SET_REAL (U"Leak", my leak);
@@ -852,8 +852,8 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_setConstraintPlasticity, U"OTGrammar: Set constraint plasticity", nullptr) {
-	NATURAL4 (constraint, U"Constraint", U"1")
-	REAL4 (plasticity, U"Plasticity", U"1.0")
+	NATURAL (constraint, U"Constraint", U"1")
+	REAL (plasticity, U"Plasticity", U"1.0")
 	OK
 DO
 	MODIFY_EACH (OTGrammar)
@@ -864,7 +864,7 @@ DO
 // MARK: Modify structure
 
 FORM (MODIFY_OTGrammar_removeConstraint, U"OTGrammar: Remove constraint", nullptr) {
-	SENTENCE4 (constraintName, U"Constraint name", U"")
+	SENTENCE (constraintName, U"Constraint name", U"")
 	OK
 DO
 	MODIFY_EACH (OTGrammar)
@@ -873,7 +873,7 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_removeHarmonicallyBoundedCandidates, U"OTGrammar: Remove harmonically bounded candidates", nullptr) {
-	BOOLEAN4 (singly, U"Singly", false)
+	BOOLEAN (singly, U"Singly", false)
 	OK
 DO
 	MODIFY_EACH (OTGrammar)
@@ -884,7 +884,7 @@ DO
 // MARK: OTGRAMMAR & STRINGS
 
 FORM (NEW1_MODIFY_OTGrammar_Strings_inputsToOutputs, U"OTGrammar: Inputs to outputs", U"OTGrammar: Inputs to outputs...") {
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
 	OK
 DO
 	FIND_TWO (OTGrammar, Strings)
@@ -907,12 +907,12 @@ DIRECT (BOOLEAN_OTGrammar_Strings_areAllPartialOutputsSinglyGrammatical) {
 }
 
 FORM (MODIFY_OTGrammar_Stringses_learn, U"OTGrammar: Learn", U"OTGrammar & 2 Strings: Learn...") {
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	OPTIONMENU_ENUM4 (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
-	REAL4 (plasticity, U"Plasticity", U"0.1")
-	REAL4 (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
-	BOOLEAN4 (honourLocalRankings, U"Honour local rankings", 1)
-	NATURAL4 (numberOfChews, U"Number of chews", U"1")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	OPTIONMENU_ENUM (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
+	REAL (plasticity, U"Plasticity", U"0.1")
+	REAL (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
+	BOOLEAN (honourLocalRankings, U"Honour local rankings", 1)
+	NATURAL (numberOfChews, U"Number of chews", U"1")
 	OK
 DO
 	MODIFY_FIRST_OF_ONE_AND_COUPLE_WEAK (OTGrammar, Strings)
@@ -922,13 +922,13 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_Strings_learnFromPartialOutputs, U"OTGrammar: Learn from partial adult outputs", nullptr) {
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	OPTIONMENU_ENUM4 (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
-	REAL4 (plasticity, U"Plasticity", U"0.1")
-	REAL4 (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
-	BOOLEAN4 (honourLocalRankings, U"Honour local rankings", 1)
-	NATURAL4 (numberOfChews, U"Number of chews", U"1")
-	INTEGER4 (storeHistoryEvery, U"Store history every", U"0")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	OPTIONMENU_ENUM (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
+	REAL (plasticity, U"Plasticity", U"0.1")
+	REAL (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
+	BOOLEAN (honourLocalRankings, U"Honour local rankings", 1)
+	NATURAL (numberOfChews, U"Number of chews", U"1")
+	INTEGER (storeHistoryEvery, U"Store history every", U"0")
 	OK
 DO
 	FIND_TWO (OTGrammar, Strings)
@@ -950,9 +950,9 @@ DO
 // MARK: OTGRAMMAR & DISTRIBUTIONS
 
 FORM (REAL_MODIFY_OTGrammar_Distributions_getFractionCorrect, U"OTGrammar & Distributions: Get fraction correct...", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	INTEGER4 (replications, U"Replications", U"100000")
+	NATURAL (columnNumber, U"Column number", U"1")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	INTEGER (replications, U"Replications", U"100000")
 	OK
 DO
 	FIND_TWO (OTGrammar, Distributions)
@@ -964,17 +964,17 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_Distributions_learnFromPartialOutputs, U"OTGrammar & Distributions: Learn from partial outputs", U"OT learning 6. Shortcut to grammar learning") {
-	NATURAL4 (columnNumber, U"Column number", U"1")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	OPTIONMENU_ENUM4 (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
-	REAL4 (initialPlasticity, U"Initial plasticity", U"1.0")
-	NATURAL4 (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
-	REAL4 (plasticityDecrement, U"Plasticity decrement", U"0.1")
-	NATURAL4 (numberOfPlasticities, U"Number of plasticities", U"4")
-	REAL4 (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
-	BOOLEAN4 (honourLocalRankings, U"Honour local rankings", 1)
-	NATURAL4 (numberOfChews, U"Number of chews", U"1")
-	INTEGER4 (storeHistoryEvery, U"Store history every", U"0")
+	NATURAL (columnNumber, U"Column number", U"1")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	OPTIONMENU_ENUM (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
+	REAL (initialPlasticity, U"Initial plasticity", U"1.0")
+	NATURAL (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
+	REAL (plasticityDecrement, U"Plasticity decrement", U"0.1")
+	NATURAL (numberOfPlasticities, U"Number of plasticities", U"4")
+	REAL (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
+	BOOLEAN (honourLocalRankings, U"Honour local rankings", 1)
+	NATURAL (numberOfChews, U"Number of chews", U"1")
+	INTEGER (storeHistoryEvery, U"Store history every", U"0")
 	OK
 DO
 	FIND_TWO (OTGrammar, Distributions)
@@ -994,17 +994,17 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_Distributions_learnFromPartialOutputs_rrip, U"OTGrammar & Distributions: Learn from partial outputs (rrip)", U"OT learning 6. Shortcut to grammar learning") {
-	NATURAL4 (columnNumber, U"Column number", U"1")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	OPTIONMENU_ENUM4 (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
-	REAL4 (initialPlasticity, U"Initial plasticity", U"1.0")
-	NATURAL4 (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
-	REAL4 (plasticityDecrement, U"Plasticity decrement", U"0.1")
-	NATURAL4 (numberOfPlasticities, U"Number of plasticities", U"4")
-	REAL4 (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
-	BOOLEAN4 (honourLocalRankings, U"Honour local rankings", 1)
-	NATURAL4 (numberOfChews, U"Number of chews", U"1")
-	INTEGER4 (storeHistoryEvery, U"Store history every", U"0")
+	NATURAL (columnNumber, U"Column number", U"1")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	OPTIONMENU_ENUM (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
+	REAL (initialPlasticity, U"Initial plasticity", U"1.0")
+	NATURAL (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
+	REAL (plasticityDecrement, U"Plasticity decrement", U"0.1")
+	NATURAL (numberOfPlasticities, U"Number of plasticities", U"4")
+	REAL (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
+	BOOLEAN (honourLocalRankings, U"Honour local rankings", 1)
+	NATURAL (numberOfChews, U"Number of chews", U"1")
+	INTEGER (storeHistoryEvery, U"Store history every", U"0")
 	OK
 DO
 	FIND_TWO (OTGrammar, Distributions)
@@ -1024,17 +1024,17 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_Distributions_learnFromPartialOutputs_eip, U"OTGrammar & Distributions: Learn from partial outputs (eip)", U"OT learning 6. Shortcut to grammar learning") {
-	NATURAL4 (columnNumber, U"Column number", U"1")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	OPTIONMENU_ENUM4 (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
-	REAL4 (initialPlasticity, U"Initial plasticity", U"1.0")
-	NATURAL4 (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
-	REAL4 (plasticityDecrement, U"Plasticity decrement", U"0.1")
-	NATURAL4 (numberOfPlasticities, U"Number of plasticities", U"4")
-	REAL4 (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
-	BOOLEAN4 (honourLocalRankings, U"Honour local rankings", 1)
-	NATURAL4 (numberOfChews, U"Number of chews", U"1")
-	INTEGER4 (storeHistoryEvery, U"Store history every", U"0")
+	NATURAL (columnNumber, U"Column number", U"1")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	OPTIONMENU_ENUM (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
+	REAL (initialPlasticity, U"Initial plasticity", U"1.0")
+	NATURAL (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
+	REAL (plasticityDecrement, U"Plasticity decrement", U"0.1")
+	NATURAL (numberOfPlasticities, U"Number of plasticities", U"4")
+	REAL (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
+	BOOLEAN (honourLocalRankings, U"Honour local rankings", 1)
+	NATURAL (numberOfChews, U"Number of chews", U"1")
+	INTEGER (storeHistoryEvery, U"Store history every", U"0")
 	OK
 DO
 	FIND_TWO (OTGrammar, Distributions)
@@ -1054,17 +1054,17 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_Distributions_learnFromPartialOutputs_wrip, U"OTGrammar & Distributions: Learn from partial outputs (wrip)", U"OT learning 6. Shortcut to grammar learning") {
-	NATURAL4 (columnNumber, U"Column number", U"1")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	OPTIONMENU_ENUM4 (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
-	REAL4 (initialPlasticity, U"Initial plasticity", U"1.0")
-	NATURAL4 (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
-	REAL4 (plasticityDecrement, U"Plasticity decrement", U"0.1")
-	NATURAL4 (numberOfPlasticities, U"Number of plasticities", U"4")
-	REAL4 (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
-	BOOLEAN4 (honourLocalRankings, U"Honour local rankings", 1)
-	NATURAL4 (numberOfChews, U"Number of chews", U"1")
-	INTEGER4 (storeHistoryEvery, U"Store history every", U"0")
+	NATURAL (columnNumber, U"Column number", U"1")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	OPTIONMENU_ENUM (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
+	REAL (initialPlasticity, U"Initial plasticity", U"1.0")
+	NATURAL (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
+	REAL (plasticityDecrement, U"Plasticity decrement", U"0.1")
+	NATURAL (numberOfPlasticities, U"Number of plasticities", U"4")
+	REAL (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
+	BOOLEAN (honourLocalRankings, U"Honour local rankings", 1)
+	NATURAL (numberOfChews, U"Number of chews", U"1")
+	INTEGER (storeHistoryEvery, U"Store history every", U"0")
 	OK
 DO
 	FIND_TWO (OTGrammar, Distributions)
@@ -1084,7 +1084,7 @@ DO
 }
 
 FORM (LIST_OTGrammar_Distributions_listObligatoryRankings, U"OTGrammar & Distributions: Get fraction correct...", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	INFO_TWO (OTGrammar, Distributions)
@@ -1095,8 +1095,8 @@ DO
 // MARK: OTGRAMMAR & PAIRDISTRIBUTION
 
 FORM (MODIFY_OTGrammar_PairDistribution_findPositiveWeights, U"OTGrammar & PairDistribution: Find positive weights", U"OTGrammar & PairDistribution: Find positive weights...") {
-	POSITIVE4 (weightFloor, U"Weight floor", U"1.0")
-	POSITIVE4 (marginOfSeparation, U"Margin of separation", U"1.0")
+	POSITIVE (weightFloor, U"Weight floor", U"1.0")
+	POSITIVE (marginOfSeparation, U"Margin of separation", U"1.0")
 	OK
 DO
 	MODIFY_FIRST_OF_TWO (OTGrammar, PairDistribution)
@@ -1105,8 +1105,8 @@ DO
 }
 
 FORM (REAL_MODIFY_OTGrammar_PairDistribution_getFractionCorrect, U"OTGrammar & PairDistribution: Get fraction correct...", nullptr) {
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	INTEGER4 (replications, U"Replications", U"100000")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	INTEGER (replications, U"Replications", U"100000")
 	OK
 DO
 	FIND_TWO (OTGrammar, PairDistribution)
@@ -1123,8 +1123,8 @@ DO
 }
 
 FORM (INTEGER_MODIFY_OTGrammar_PairDistribution_getMinimumNumberCorrect, U"OTGrammar & PairDistribution: Get minimum number correct...", nullptr) {
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	INTEGER4 (replicationsPerInput, U"Replications per input", U"1000")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	INTEGER (replicationsPerInput, U"Replications per input", U"1000")
 	OK
 DO
 	FIND_TWO (OTGrammar, PairDistribution)
@@ -1142,15 +1142,15 @@ DO
 }
 
 FORM (MODIFY_OTGrammar_PairDistribution_learn, U"OTGrammar & PairDistribution: Learn", U"OT learning 6. Shortcut to grammar learning") {
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	OPTIONMENU_ENUM4 (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
-	POSITIVE4 (initialPlasticity, U"Initial plasticity", U"1.0")
-	NATURAL4 (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
-	REAL4 (plasticityDecrement, U"Plasticity decrement", U"0.1")
-	NATURAL4 (numberOfPlasticities, U"Number of plasticities", U"4")
-	REAL4 (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
-	BOOLEAN4 (honourLocalRankings, U"Honour local rankings", true)
-	NATURAL4 (numberOfChews, U"Number of chews", U"1")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	OPTIONMENU_ENUM (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
+	POSITIVE (initialPlasticity, U"Initial plasticity", U"1.0")
+	NATURAL (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
+	REAL (plasticityDecrement, U"Plasticity decrement", U"0.1")
+	NATURAL (numberOfPlasticities, U"Number of plasticities", U"4")
+	REAL (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
+	BOOLEAN (honourLocalRankings, U"Honour local rankings", true)
+	NATURAL (numberOfChews, U"Number of chews", U"1")
 	OK
 DO
 	MODIFY_FIRST_OF_TWO_WEAK (OTGrammar, PairDistribution)
@@ -1172,23 +1172,23 @@ DIRECT (LIST_OTGrammar_PairDistribution_listObligatoryRankings) {
 // MARK: New
 
 FORM (NEW1_Create_multi_level_metrics_grammar, U"Create multi-level metrics grammar", nullptr) {
-	OPTIONMENU4 (initialRanking, U"Initial ranking", 1)
+	OPTIONMENU (initialRanking, U"Initial ranking", 1)
 		OPTION (U"Equal")
 		OPTION (U"Foot form high")
 		OPTION (U"WSP high")
-	OPTIONMENU4 (trochaicityConstraint, U"Trochaicity constraint", 1)
+	OPTIONMENU (trochaicityConstraint, U"Trochaicity constraint", 1)
 		OPTION (U"FtNonfinal")
 		OPTION (U"Trochaic")
-	BOOLEAN4 (includeFootBimoraic, U"Include FootBimoraic", false)
-	BOOLEAN4 (includeFootBisyllabic, U"Include FootBisyllabic", false)
-	BOOLEAN4 (includePeripheral, U"Include Peripheral", false)
-	OPTIONMENU4 (nonfinalityConstraint, U"Nonfinality constraint", 1)
+	BOOLEAN (includeFootBimoraic, U"Include FootBimoraic", false)
+	BOOLEAN (includeFootBisyllabic, U"Include FootBisyllabic", false)
+	BOOLEAN (includePeripheral, U"Include Peripheral", false)
+	OPTIONMENU (nonfinalityConstraint, U"Nonfinality constraint", 1)
 		OPTION (U"Nonfinal")
 		OPTION (U"MainNonfinal")
 		OPTION (U"HeadNonfinal")
-	BOOLEAN4 (overtFormsHaveSecondaryStress, U"Overt forms have secondary stress", true)
-	BOOLEAN4 (includeClashAndLapse, U"Include *Clash and *Lapse", false)
-	BOOLEAN4 (includeCodas, U"Include codas", false)
+	BOOLEAN (overtFormsHaveSecondaryStress, U"Overt forms have secondary stress", true)
+	BOOLEAN (includeClashAndLapse, U"Include *Clash and *Lapse", false)
+	BOOLEAN (includeCodas, U"Include codas", false)
 	OK
 DO
 	CREATE_ONE
@@ -1201,9 +1201,9 @@ DO
 // MARK: Draw
 
 FORM (GRAPHICS_OTMulti_drawTableau, U"Draw tableau", U"OT learning") {
-	SENTENCE4 (partialForm1, U"Partial form 1", U"")
-	SENTENCE4 (partialForm2, U"Partial form 2", U"")
-	BOOLEAN4 (showDisharmonies, U"Show disharmonies", true)
+	SENTENCE (partialForm1, U"Partial form 1", U"")
+	SENTENCE (partialForm2, U"Partial form 2", U"")
+	BOOLEAN (showDisharmonies, U"Show disharmonies", true)
 	OK
 DO
 	GRAPHICS_EACH (OTMulti)
@@ -1212,9 +1212,9 @@ DO
 }
 
 FORM (GRAPHICS_OTMulti_drawTableau_narrowly, U"Draw tableau (narrowly)", U"OT learning") {
-	SENTENCE4 (partialForm1, U"Partial form 1", U"")
-	SENTENCE4 (partialForm2, U"Partial form 2", U"")
-	BOOLEAN4 (showDisharmonies, U"Show disharmonies", true)
+	SENTENCE (partialForm1, U"Partial form 1", U"")
+	SENTENCE (partialForm2, U"Partial form 2", U"")
+	BOOLEAN (showDisharmonies, U"Show disharmonies", true)
 	OK
 DO
 	GRAPHICS_EACH (OTMulti)
@@ -1242,7 +1242,7 @@ DIRECT (INTEGER_OTMulti_getNumberOfConstraints) {
 }
 
 FORM (STRING_OTMulti_getConstraint, U"Get constraint name", nullptr) {
-	NATURAL4 (constraintNumber, U"Constraint number", U"1")
+	NATURAL (constraintNumber, U"Constraint number", U"1")
 	OK
 DO
 	STRING_ONE (OTMulti)
@@ -1253,7 +1253,7 @@ DO
 }
 
 FORM (INTEGER_OTMulti_getConstraintIndexFromName, U"OTMulti: Get constraint number", nullptr) {
-	SENTENCE4 (constraintName, U"Constraint name", U"")
+	SENTENCE (constraintName, U"Constraint name", U"")
 	OK
 DO
 	NUMBER_ONE (OTMulti)
@@ -1262,7 +1262,7 @@ DO
 }
 
 FORM (REAL_OTMulti_getRankingValue, U"Get ranking value", nullptr) {
-	NATURAL4 (constraintNumber, U"Constraint number", U"1")
+	NATURAL (constraintNumber, U"Constraint number", U"1")
 	OK
 DO
 	NUMBER_ONE (OTMulti)
@@ -1273,7 +1273,7 @@ DO
 }
 
 FORM (REAL_OTMulti_getDisharmony, U"Get disharmony", nullptr) {
-	NATURAL4 (constraintNumber, U"Constraint number", U"1")
+	NATURAL (constraintNumber, U"Constraint number", U"1")
 	OK
 DO
 	NUMBER_ONE (OTMulti)
@@ -1290,7 +1290,7 @@ DIRECT (INTEGER_OTMulti_getNumberOfCandidates) {
 }
 
 FORM (STRING_OTMulti_getCandidate, U"Get candidate", nullptr) {
-	NATURAL4 (candidateNumber, U"Candidate number", U"1")
+	NATURAL (candidateNumber, U"Candidate number", U"1")
 	OK
 DO
 	STRING_ONE (OTMulti)
@@ -1301,8 +1301,8 @@ DO
 }
 
 FORM (INTEGER_OTMulti_getNumberOfViolations, U"Get number of violations", nullptr) {
-	NATURAL4 (candidateNumber, U"Candidate number", U"1")
-	NATURAL4 (constraintNumber, U"Constraint number", U"1")
+	NATURAL (candidateNumber, U"Candidate number", U"1")
+	NATURAL (constraintNumber, U"Constraint number", U"1")
 	OK
 DO
 	NUMBER_ONE (OTMulti)
@@ -1315,8 +1315,8 @@ DO
 }
 
 FORM (INTEGER_OTMulti_getWinner, U"OTMulti: Get winner", nullptr) {
-	SENTENCE4 (partialForm1, U"Partial form 1", U"")
-	SENTENCE4 (partialForm2, U"Partial form 2", U"")
+	SENTENCE (partialForm1, U"Partial form 1", U"")
+	SENTENCE (partialForm2, U"Partial form 2", U"")
 	OK
 DO
 	NUMBER_ONE (OTMulti)
@@ -1327,7 +1327,7 @@ DO
 // MARK: Evaluate
 
 FORM (MODIFY_OTMulti_evaluate, U"OTMulti: Evaluate", nullptr) {
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
 	OK
 DO
 	MODIFY_EACH (OTMulti)
@@ -1336,9 +1336,9 @@ DO
 }
 
 FORM (STRING_MODIFY_OTMulti_generateOptimalForm, U"OTMulti: Generate optimal form", nullptr) {
-	SENTENCE4 (partialForm1, U"Partial form 1", U"")
-	SENTENCE4 (partialForm2, U"Partial form 2", U"")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
+	SENTENCE (partialForm1, U"Partial form 1", U"")
+	SENTENCE (partialForm2, U"Partial form 2", U"")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
 	OK
 DO
 	FIND_ONE (OTMulti)
@@ -1350,10 +1350,10 @@ DO
 }
 
 FORM (NEW1_MODIFY_OTMulti_generateOptimalForms, U"OTMulti: Generate optimal forms", nullptr) {
-	SENTENCE4 (partialForm1, U"Partial form 1", U"")
-	SENTENCE4 (partialForm2, U"Partial form 2", U"")
-	NATURAL4 (numberOfTrials, U"Number of trials", U"1000")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
+	SENTENCE (partialForm1, U"Partial form 1", U"")
+	SENTENCE (partialForm2, U"Partial form 2", U"")
+	NATURAL (numberOfTrials, U"Number of trials", U"1000")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
 	OK
 DO
 	FIND_ONE (OTMulti)
@@ -1365,10 +1365,10 @@ DO
 }
 
 FORM (NEW_MODIFY_OTMulti_to_Distribution, U"OTMulti: Compute output distribution", nullptr) {
-	SENTENCE4 (partialForm1, U"Partial form 1", U"")
-	SENTENCE4 (partialForm2, U"Partial form 2", U"")
-	NATURAL4 (numberOfTrials, U"Number of trials", U"100000")
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
+	SENTENCE (partialForm1, U"Partial form 1", U"")
+	SENTENCE (partialForm2, U"Partial form 2", U"")
+	NATURAL (numberOfTrials, U"Number of trials", U"100000")
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
 	OK
 DO
 	LOOP {
@@ -1388,9 +1388,9 @@ END }
 // MARK: Modify ranking
 
 FORM (MODIFY_OTMulti_setRanking, U"OTMulti: Set ranking", nullptr) {
-	NATURAL4 (constraint, U"Constraint", U"1")
-	REAL4 (ranking, U"Ranking", U"100.0")
-	REAL4 (disharmony, U"Disharmony", U"100.0")
+	NATURAL (constraint, U"Constraint", U"1")
+	REAL (ranking, U"Ranking", U"100.0")
+	REAL (disharmony, U"Disharmony", U"100.0")
 	OK
 DO
 	MODIFY_EACH (OTMulti)
@@ -1399,7 +1399,7 @@ DO
 }
 
 FORM (MODIFY_OTMulti_resetAllRankings, U"OTMulti: Reset all rankings", nullptr) {
-	REAL4 (ranking, U"Ranking", U"100.0")
+	REAL (ranking, U"Ranking", U"100.0")
 	OK
 DO
 	MODIFY_EACH (OTMulti)
@@ -1408,15 +1408,15 @@ DO
 }
 
 FORM (MODIFY_OTMulti_learnOne, U"OTMulti: Learn one", nullptr) {
-	SENTENCE4 (partialForm1, U"Partial form 1", U"")
-	SENTENCE4 (partialForm2, U"Partial form 2", U"")
-	OPTIONMENU_ENUM4 (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
-	OPTIONMENU4 (direction, U"Direction", 3)
+	SENTENCE (partialForm1, U"Partial form 1", U"")
+	SENTENCE (partialForm2, U"Partial form 2", U"")
+	OPTIONMENU_ENUM (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
+	OPTIONMENU (direction, U"Direction", 3)
 		OPTION (U"forward")
 		OPTION (U"backward")
 		OPTION (U"bidirectionally")
-	POSITIVE4 (plasticity, U"Plasticity", U"0.1")
-	REAL4 (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
+	POSITIVE (plasticity, U"Plasticity", U"0.1")
+	REAL (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
 	OK
 DO
 	MODIFY_EACH_WEAK (OTMulti)
@@ -1428,7 +1428,7 @@ DO
 // MARK: Modify behaviour
 
 FORM (MODIFY_OTMulti_setDecisionStrategy, U"OTMulti: Set decision strategy", nullptr) {
-	RADIO_ENUM4 (decisionStrategy, U"Decision strategy", kOTGrammar_decisionStrategy, DEFAULT)
+	RADIO_ENUM (decisionStrategy, U"Decision strategy", kOTGrammar_decisionStrategy, DEFAULT)
 OK
 	FIND_ONE (OTMulti)
 		SET_ENUM (U"Decision strategy", kOTGrammar_decisionStrategy, my decisionStrategy);
@@ -1439,7 +1439,7 @@ DO
 }
 
 FORM (MODIFY_OTMulti_setLeak, U"OTGrammar: Set leak", nullptr) {
-	REAL4 (leak, U"Leak", U"0.0")
+	REAL (leak, U"Leak", U"0.0")
 OK
 	FIND_ONE (OTMulti)
 		SET_REAL (U"Leak", my leak);
@@ -1450,8 +1450,8 @@ DO
 }
 
 FORM (MODIFY_OTMulti_setConstraintPlasticity, U"OTMulti: Set constraint plasticity", nullptr) {
-	NATURAL4 (constraintNumber, U"Constraint number", U"1")
-	REAL4 (plasticity, U"Plasticity", U"1.0")
+	NATURAL (constraintNumber, U"Constraint number", U"1")
+	REAL (plasticity, U"Plasticity", U"1.0")
 	OK
 DO
 	MODIFY_EACH (OTMulti)
@@ -1462,7 +1462,7 @@ DO
 // MARK: Modify structure
 
 FORM (MODIFY_OTMulti_removeConstraint, U"OTMulti: Remove constraint", nullptr) {
-	SENTENCE4 (constraintName, U"Constraint name", U"")
+	SENTENCE (constraintName, U"Constraint name", U"")
 	OK
 DO
 	MODIFY_EACH (OTMulti)
@@ -1473,18 +1473,18 @@ DO
 // MARK: OTMULTI & PAIRDISTRIBUTION
 
 FORM (DANGEROUS_MODIFY_OTMulti_PairDistribution_learn, U"OTMulti & PairDistribution: Learn", nullptr) {
-	REAL4 (evaluationNoise, U"Evaluation noise", U"2.0")
-	OPTIONMENU_ENUM4 (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
-	OPTIONMENU4 (direction, U"Direction", 3)
+	REAL (evaluationNoise, U"Evaluation noise", U"2.0")
+	OPTIONMENU_ENUM (updateRule, U"Update rule", kOTGrammar_rerankingStrategy, SYMMETRIC_ALL)
+	OPTIONMENU (direction, U"Direction", 3)
 		OPTION (U"forward")
 		OPTION (U"backward")
 		OPTION (U"bidirectionally")
-	POSITIVE4 (initialPlasticity, U"Initial plasticity", U"1.0")
-	NATURAL4 (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
-	REAL4 (plasticityDecrement, U"Plasticity decrement", U"0.1")
-	NATURAL4 (numberOfPlasticities, U"Number of plasticities", U"4")
-	REAL4 (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
-	INTEGER4 (storeHistoryEvery, U"Store history every", U"0")
+	POSITIVE (initialPlasticity, U"Initial plasticity", U"1.0")
+	NATURAL (replicationsPerPlasticity, U"Replications per plasticity", U"100000")
+	REAL (plasticityDecrement, U"Plasticity decrement", U"0.1")
+	NATURAL (numberOfPlasticities, U"Number of plasticities", U"4")
+	REAL (relativePlasticitySpreading, U"Rel. plasticity spreading", U"0.1")
+	INTEGER (storeHistoryEvery, U"Store history every", U"0")
 	OK
 DO
 	FIND_TWO (OTMulti, PairDistribution)
@@ -1507,7 +1507,7 @@ DO
 // MARK: OTMULTI & STRINGS
 
 FORM (NEW1_MODIFY_OTMulti_Strings_generateOptimalForms, U"OTGrammar: Inputs to outputs", U"OTGrammar: Inputs to outputs...") {
-	REAL4 (evaluationNoide, U"Evaluation noise", U"2.0")
+	REAL (evaluationNoide, U"Evaluation noise", U"2.0")
 	OK
 DO
 	FIND_TWO (OTMulti, Strings)
@@ -1522,10 +1522,10 @@ DO
 // MARK: New
 
 FORM (NEW1_Create_RBM, U"Create RBM (Restricted Boltzmann Machine)", nullptr) {
-	WORD4 (name, U"Name", U"network")
-	NATURAL4 (numberOfInputNodes, U"Number of input nodes", U"50")
-	NATURAL4 (numberOfOutputNodes, U"Number of output nodes", U"20")
-	BOOLEAN4 (inputsAreBinary, U"Inputs are binary", true)
+	WORD (name, U"Name", U"network")
+	NATURAL (numberOfInputNodes, U"Number of input nodes", U"50")
+	NATURAL (numberOfOutputNodes, U"Number of output nodes", U"20")
+	BOOLEAN (inputsAreBinary, U"Inputs are binary", true)
 	OK
 DO
 	CREATE_ONE
@@ -1572,7 +1572,7 @@ DIRECT (MODIFY_RBM_sampleOutput) {
 }
 
 FORM (MODIFY_RBM_update, U"RBM: Update", nullptr) {
-	POSITIVE4 (learningRate, U"Learning rate", U"0.001")
+	POSITIVE (learningRate, U"Learning rate", U"0.001")
 	OK
 DO
 	MODIFY_EACH (RBM)
@@ -1627,7 +1627,7 @@ DIRECT (NEW_RBM_extractWeights) {
 // MARK: - RBM & PATTERN
 
 FORM (MODIFY_RBM_PatternList_applyToInput, U"RBM & PatternList: Apply to input", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
 	OK
 DO
 	MODIFY_FIRST_OF_TWO (RBM, PatternList)
@@ -1636,7 +1636,7 @@ DO
 }
 
 FORM (MODIFY_RBM_PatternList_applyToOutput, U"RBM & PatternList: Apply to output", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
 	OK
 DO
 	MODIFY_FIRST_OF_TWO (RBM, PatternList)
@@ -1645,7 +1645,7 @@ DO
 }
 
 FORM (MODIFY_RBM_PatternList_learn, U"RBM & PatternList: Learn", nullptr) {
-	POSITIVE4 (learningRate, U"Learning rate", U"0.001")
+	POSITIVE (learningRate, U"Learning rate", U"0.001")
 	OK
 DO
 	MODIFY_FIRST_OF_TWO (RBM, PatternList)
diff --git a/stat/praat_Stat.cpp b/stat/praat_Stat.cpp
index e3c2498..1e00a99 100644
--- a/stat/praat_Stat.cpp
+++ b/stat/praat_Stat.cpp
@@ -48,7 +48,7 @@ DIRECT (HELP_Table_help) {
 // MARK: Query
 
 FORM (REAL_Distributionses_getMeanAbsoluteDifference, U"Get mean difference", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	NUMBER_COUPLE (Distributions)
@@ -57,8 +57,8 @@ DO
 }
 
 FORM (REAL_Distributions_getProbability, U"Get probability", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
-	SENTENCE4 (string, U"String", U"")
+	NATURAL (columnNumber, U"Column number", U"1")
+	SENTENCE (string, U"String", U"")
 	OK
 DO
 	NUMBER_ONE (Distributions)
@@ -77,8 +77,8 @@ DIRECT (NEW1_Distributionses_add) {
 // MARK: Generate
 
 FORM (NEW_Distributions_to_Strings, U"To Strings", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
-	NATURAL4 (numberOfStrings, U"Number of strings", U"1000")
+	NATURAL (columnNumber, U"Column number", U"1")
+	NATURAL (numberOfStrings, U"Number of strings", U"1000")
 	OK
 DO
 	CONVERT_EACH (Distributions)
@@ -87,7 +87,7 @@ DO
 }
 
 FORM (NEW_Distributions_to_Strings_exact, U"To Strings (exact)", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	CONVERT_EACH (Distributions)
@@ -100,13 +100,13 @@ DO
 // MARK: Draw
 
 FORM (GRAPHICS_LogisticRegression_drawBoundary, U"LogisticRegression: Draw boundary", nullptr) {
-	SENTENCE4 (horizontalFactor, U"Horizontal factor", U"")
-	REAL4 (fromHorizontal, U"left Horizontal range", U"0.0")
-	REAL4 (toHorizontal, U"right Horizontal range", U"0.0 (= auto)")
-	SENTENCE4 (verticalFactor, U"Vertical factor", U"")
-	REAL4 (fromVertical, U"left Vertical range", U"0.0")
-	REAL4 (toVertical, U"right Vertical range", U"0.0 (= auto)")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	SENTENCE (horizontalFactor, U"Horizontal factor", U"")
+	REAL (fromHorizontal, U"left Horizontal range", U"0.0")
+	REAL (toHorizontal, U"right Horizontal range", U"0.0 (= auto)")
+	SENTENCE (verticalFactor, U"Vertical factor", U"")
+	REAL (fromVertical, U"left Vertical range", U"0.0")
+	REAL (toVertical, U"right Vertical range", U"0.0 (= auto)")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (LogisticRegression)
@@ -148,7 +148,7 @@ DIRECT (INTEGER_PairDistribution_getNumberOfPairs) {
 }
 
 FORM (STRING_PairDistribution_getString1, U"Get string1", nullptr) {
-	NATURAL4 (pairNumber, U"Pair number", U"1")
+	NATURAL (pairNumber, U"Pair number", U"1")
 	OK
 DO
 	STRING_ONE (PairDistribution)
@@ -157,7 +157,7 @@ DO
 }
 
 FORM (STRING_PairDistribution_getString2, U"Get string2", nullptr) {
-	NATURAL4 (pairNumber, U"Pair number", U"1")
+	NATURAL (pairNumber, U"Pair number", U"1")
 	OK
 DO
 	STRING_ONE (PairDistribution)
@@ -166,7 +166,7 @@ DO
 }
 
 FORM (REAL_PairDistribution_getWeight, U"Get weight", nullptr) {
-	NATURAL4 (pairNumber, U"Pair number", U"1")
+	NATURAL (pairNumber, U"Pair number", U"1")
 	OK
 DO
 	NUMBER_ONE (PairDistribution)
@@ -191,9 +191,9 @@ DIRECT (MODIFY_PairDistribution_swapInputsAndOutputs) {
 // MARK: Generate
 
 FORM (NEW2_PairDistribution_to_Stringses, U"Generate two Strings objects", nullptr) {
-	NATURAL4 (number, U"Number", U"1000")
-	SENTENCE4 (nameOfFirstStrings, U"Name of first Strings", U"input")
-	SENTENCE4 (nameOfSecondStrings, U"Name of second Strings", U"output")
+	NATURAL (number, U"Number", U"1000")
+	SENTENCE (nameOfFirstStrings, U"Name of first Strings", U"input")
+	SENTENCE (nameOfSecondStrings, U"Name of second Strings", U"output")
 	OK
 DO
 	FIND_ONE (PairDistribution)
@@ -213,7 +213,7 @@ DIRECT (NEW_PairDistribution_to_Table) {
 // MARK: - PAIRDISTRIBUTION & DISTRIBUTIONS
 
 FORM (REAL_PairDistribution_Distributions_getFractionCorrect, U"PairDistribution & Distributions: Get fraction correct", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	NUMBER_TWO (PairDistribution, Distributions)
@@ -226,10 +226,10 @@ DO
 // MARK: New
 
 FORM (NEW1_Table_createWithColumnNames, U"Create Table with column names", nullptr) {
-	WORD4 (name, U"Name", U"table")
-	INTEGER4 (numberOfRows, U"Number of rows", U"10")
+	WORD (name, U"Name", U"table")
+	INTEGER (numberOfRows, U"Number of rows", U"10")
 	LABEL (U"", U"Column names:")
-	TEXTFIELD4 (columnNames, U"columnNames", U"speaker dialect age vowel F0 F1 F2")
+	TEXTFIELD (columnNames, U"columnNames", U"speaker dialect age vowel F0 F1 F2")
 	OK
 DO
 	CREATE_ONE
@@ -238,9 +238,9 @@ DO
 }
 
 FORM (NEW1_Table_createWithoutColumnNames, U"Create Table without column names", nullptr) {
-	WORD4 (name, U"Name", U"table")
-	INTEGER4 (numberOfRows, U"Number of rows", U"10")
-	NATURAL4 (numberOfColumns, U"Number of columns", U"3")
+	WORD (name, U"Name", U"table")
+	INTEGER (numberOfRows, U"Number of rows", U"10")
+	NATURAL (numberOfColumns, U"Number of columns", U"3")
 	OK
 DO
 	CREATE_ONE
@@ -302,7 +302,7 @@ DIRECT (WINDOW_Table_viewAndEdit) {
 // MARK: Tabulate
 
 FORM (LIST_Table_list, U"Table: List", nullptr) {
-	BOOLEAN4 (includeRowNumbers, U"Include row numbers", true)
+	BOOLEAN (includeRowNumbers, U"Include row numbers", true)
 	OK
 DO
 	INFO_ONE (Table)
@@ -313,15 +313,15 @@ DO
 // MARK: Draw
 
 FORM (GRAPHICS_Table_scatterPlot, U"Scatter plot", nullptr) {
-	SENTENCE4 (horizontalColumn, U"Horizontal column", U"")
-	REAL4 (fromHorizontal, U"left Horizontal range", U"0.0")
-	REAL4 (toHorizontal, U"right Horizontal range", U"0.0 (= auto)")
-	SENTENCE4 (verticalColumn, U"Vertical column", U"")
-	REAL4 (fromVertical, U"left Vertical range", U"0.0")
-	REAL4 (toVertical, U"right Vertical range", U"0.0 (= auto)")
-	SENTENCE4 (columnWithMarks, U"Column with marks", U"")
-	NATURAL4 (fontSize, U"Font size", U"12")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	SENTENCE (horizontalColumn, U"Horizontal column", U"")
+	REAL (fromHorizontal, U"left Horizontal range", U"0.0")
+	REAL (toHorizontal, U"right Horizontal range", U"0.0 (= auto)")
+	SENTENCE (verticalColumn, U"Vertical column", U"")
+	REAL (fromVertical, U"left Vertical range", U"0.0")
+	REAL (toVertical, U"right Vertical range", U"0.0 (= auto)")
+	SENTENCE (columnWithMarks, U"Column with marks", U"")
+	NATURAL (fontSize, U"Font size", U"12")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -334,15 +334,15 @@ DO
 }
 
 FORM (GRAPHICS_Table_scatterPlot_mark, U"Scatter plot (marks)", nullptr) {
-	SENTENCE4 (horizontalColumn, U"Horizontal column", U"")
-	REAL4 (fromHorizontal, U"left Horizontal range", U"0.0")
-	REAL4 (toHorizontal, U"right Horizontal range", U"0.0 (= auto)")
-	SENTENCE4 (verticalColumn, U"Vertical column", U"")
-	REAL4 (fromVertical, U"left Vertical range", U"0.0")
-	REAL4 (toVertical, U"right Vertical range", U"0.0 (= auto)")
-	POSITIVE4 (markSize, U"Mark size (mm)", U"1.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
-	SENTENCE4 (markString, U"Mark string (+xo.)", U"+")
+	SENTENCE (horizontalColumn, U"Horizontal column", U"")
+	REAL (fromHorizontal, U"left Horizontal range", U"0.0")
+	REAL (toHorizontal, U"right Horizontal range", U"0.0 (= auto)")
+	SENTENCE (verticalColumn, U"Vertical column", U"")
+	REAL (fromVertical, U"left Vertical range", U"0.0")
+	REAL (toVertical, U"right Vertical range", U"0.0 (= auto)")
+	POSITIVE (markSize, U"Mark size (mm)", U"1.0")
+	BOOLEAN (garnish, U"Garnish", true)
+	SENTENCE (markString, U"Mark string (+xo.)", U"+")
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -355,14 +355,14 @@ DO
 }
 
 FORM (GRAPHICS_Table_drawEllipse, U"Draw ellipse (standard deviation)", nullptr) {
-	SENTENCE4 (horizontalColumn, U"Horizontal column", U"")
-	REAL4 (fromHorizontal, U"left Horizontal range", U"0.0")
-	REAL4 (toHorizontal, U"right Horizontal range", U"0.0 (= auto)")
-	SENTENCE4 (verticalColumn, U"Vertical column", U"")
-	REAL4 (fromVertical, U"left Vertical range", U"0.0")
-	REAL4 (toVertical, U"right Vertical range", U"0.0 (= auto)")
-	POSITIVE4 (numberOfSigmas, U"Number of sigmas", U"2.0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	SENTENCE (horizontalColumn, U"Horizontal column", U"")
+	REAL (fromHorizontal, U"left Horizontal range", U"0.0")
+	REAL (toHorizontal, U"right Horizontal range", U"0.0 (= auto)")
+	SENTENCE (verticalColumn, U"Vertical column", U"")
+	REAL (fromVertical, U"left Vertical range", U"0.0")
+	REAL (toVertical, U"right Vertical range", U"0.0 (= auto)")
+	POSITIVE (numberOfSigmas, U"Number of sigmas", U"2.0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (Table)
@@ -376,7 +376,7 @@ DO
 // MARK: Query
 
 FORM (INTEGER_Table_drawRowFromDistribution, U"Table: Draw row from distribution", nullptr) {
-	SENTENCE4 (columnWithDistribution, U"Column with distribution", U"")
+	SENTENCE (columnWithDistribution, U"Column with distribution", U"")
 	OK
 DO
 	NUMBER_ONE (Table)
@@ -386,7 +386,7 @@ DO
 }
 
 FORM (INTEGER_Table_getColumnIndex, U"Table: Get column index", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"")
+	SENTENCE (columnLabel, U"Column label", U"")
 	OK
 DO
 	NUMBER_ONE (Table)
@@ -395,7 +395,7 @@ DO
 }
 
 FORM (STRING_Table_getColumnLabel, U"Table: Get column label", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	STRING_ONE (Table)
@@ -406,9 +406,9 @@ DO
 }
 
 FORM (REAL_Table_getGroupMean, U"Table: Get group mean", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"salary")
-	SENTENCE4 (groupColumnLabel, U"Group column label", U"gender")
-	SENTENCE4 (group, U"Group", U"F")
+	SENTENCE (columnLabel, U"Column label", U"salary")
+	SENTENCE (groupColumnLabel, U"Group column label", U"gender")
+	SENTENCE (group, U"Group", U"F")
 	OK
 DO
 	NUMBER_ONE (Table)
@@ -419,7 +419,7 @@ DO
 }
 
 FORM (REAL_Table_getMaximum, U"Table: Get maximum", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"")
+	SENTENCE (columnLabel, U"Column label", U"")
 	OK
 DO
 	NUMBER_ONE (Table)
@@ -429,7 +429,7 @@ DO
 }
 
 FORM (REAL_Table_getMean, U"Table: Get mean", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"")
+	SENTENCE (columnLabel, U"Column label", U"")
 	OK
 DO
 	NUMBER_ONE (Table)
@@ -439,7 +439,7 @@ DO
 }
 
 FORM (REAL_Table_getMinimum, U"Table: Get minimum", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"")
+	SENTENCE (columnLabel, U"Column label", U"")
 	OK
 DO
 	NUMBER_ONE (Table)
@@ -449,8 +449,8 @@ DO
 }
 
 FORM (REAL_Table_getQuantile, U"Table: Get quantile", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"")
-	POSITIVE4 (quantile, U"Quantile", U"0.50 (= median)")
+	SENTENCE (columnLabel, U"Column label", U"")
+	POSITIVE (quantile, U"Quantile", U"0.50 (= median)")
 	OK
 DO
 	NUMBER_ONE (Table)
@@ -460,7 +460,7 @@ DO
 }
 
 FORM (REAL_Table_getStandardDeviation, U"Table: Get standard deviation", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"")
+	SENTENCE (columnLabel, U"Column label", U"")
 	OK
 DO
 	NUMBER_ONE (Table)
@@ -482,8 +482,8 @@ DIRECT (INTEGER_Table_getNumberOfRows) {
 }
 
 FORM (STRING_Table_getValue, U"Table: Get value", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
-	SENTENCE4 (columnLabel, U"Column label", U"")
+	NATURAL (rowNumber, U"Row number", U"1")
+	SENTENCE (columnLabel, U"Column label", U"")
 	OK
 DO
 	STRING_ONE (Table)
@@ -494,8 +494,8 @@ DO
 }
 
 FORM (INTEGER_Table_searchColumn, U"Table: Search column", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"")
-	SENTENCE4 (value, U"Value", U"")
+	SENTENCE (columnLabel, U"Column label", U"")
+	SENTENCE (value, U"Value", U"")
 	OK
 DO
 	NUMBER_ONE (Table)
@@ -507,9 +507,9 @@ DO
 // MARK: Statistics
 
 FORM (INFO_Table_reportCorrelation_kendallTau, U"Report correlation (Kendall tau)", nullptr) {
-	SENTENCE4 (column1, U"left Columns", U"")
-	SENTENCE4 (column2, U"right Columns", U"")
-	POSITIVE4 (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
+	SENTENCE (column1, U"left Columns", U"")
+	SENTENCE (column2, U"right Columns", U"")
+	POSITIVE (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
 	OK
 DO
 	INFO_ONE (Table)
@@ -533,9 +533,9 @@ DO
 }
 
 FORM (INFO_Table_reportCorrelation_pearsonR, U"Report correlation (Pearson r)", nullptr) {
-	SENTENCE4 (column1, U"left Columns", U"")
-	SENTENCE4 (column2, U"right Columns", U"")
-	POSITIVE4 (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
+	SENTENCE (column1, U"left Columns", U"")
+	SENTENCE (column2, U"right Columns", U"")
+	POSITIVE (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
 	OK
 DO
 	INFO_ONE (Table)
@@ -560,9 +560,9 @@ DO
 }
 
 FORM (INFO_Table_reportDifference_studentT, U"Report difference (Student t)", nullptr) {
-	SENTENCE4 (column1, U"left Columns", U"")
-	SENTENCE4 (column2, U"right Columns", U"")
-	POSITIVE4 (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
+	SENTENCE (column1, U"left Columns", U"")
+	SENTENCE (column2, U"right Columns", U"")
+	POSITIVE (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
 	OK
 DO
 	INFO_ONE (Table)
@@ -588,11 +588,11 @@ DO
 }
 
 FORM (INFO_Table_reportGroupDifference_studentT, U"Report group difference (Student t)", nullptr) {
-	SENTENCE4 (column, U"Column", U"salary")
-	SENTENCE4 (groupColumn, U"Group column", U"gender")
-	SENTENCE4 (group1, U"Group 1", U"F")
-	SENTENCE4 (group2, U"Group 2", U"M")
-	POSITIVE4 (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
+	SENTENCE (column, U"Column", U"salary")
+	SENTENCE (groupColumn, U"Group column", U"gender")
+	SENTENCE (group1, U"Group 1", U"F")
+	SENTENCE (group2, U"Group 2", U"M")
+	POSITIVE (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
 	OK
 DO
 	INFO_ONE (Table)
@@ -618,10 +618,10 @@ DO
 }
 
 FORM (INFO_Table_reportGroupDifference_wilcoxonRankSum, U"Report group difference (Wilcoxon rank sum)", nullptr) {
-	SENTENCE4 (column, U"Column", U"salary")
-	SENTENCE4 (groupColumn, U"Group column", U"gender")
-	SENTENCE4 (group1, U"Group 1", U"F")
-	SENTENCE4 (group2, U"Group 2", U"M")
+	SENTENCE (column, U"Column", U"salary")
+	SENTENCE (groupColumn, U"Group column", U"gender")
+	SENTENCE (group1, U"Group 1", U"F")
+	SENTENCE (group2, U"Group 2", U"M")
 	OK
 DO
 	INFO_ONE (Table)
@@ -642,10 +642,10 @@ DO
 }
 
 FORM (INFO_Table_reportGroupMean_studentT, U"Report group mean (Student t)", nullptr) {
-	SENTENCE4 (column, U"Column", U"salary")
-	SENTENCE4 (groupColumn, U"Group column", U"gender")
-	SENTENCE4 (group, U"Group", U"F")
-	POSITIVE4 (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
+	SENTENCE (column, U"Column", U"salary")
+	SENTENCE (groupColumn, U"Group column", U"gender")
+	SENTENCE (group, U"Group", U"F")
+	POSITIVE (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
 	OK
 DO
 	INFO_ONE (Table)
@@ -671,8 +671,8 @@ DO
 }
 
 FORM (INFO_Table_reportMean_studentT, U"Report mean (Student t)", nullptr) {
-	SENTENCE4 (column, U"Column", U"")
-	POSITIVE4 (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
+	SENTENCE (column, U"Column", U"")
+	POSITIVE (oneTailedUnconfidence, U"One-tailed unconfidence", U"0.025")
 	OK
 DO
 	INFO_ONE (Table)
@@ -698,7 +698,7 @@ DO
 // MARK: Modify
 
 FORM (MODIFY_Table_appendColumn, U"Table: Append column", nullptr) {
-	SENTENCE4 (label, U"Label", U"newcolumn")
+	SENTENCE (label, U"Label", U"newcolumn")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -707,9 +707,9 @@ DO
 }
 
 FORM (MODIFY_Table_appendDifferenceColumn, U"Table: Append difference column", nullptr) {
-	SENTENCE4 (column1, U"left Columns", U"")
-	SENTENCE4 (column2, U"right Columns", U"")
-	SENTENCE4 (label, U"Label", U"diff")
+	SENTENCE (column1, U"left Columns", U"")
+	SENTENCE (column2, U"right Columns", U"")
+	SENTENCE (label, U"Label", U"diff")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -720,9 +720,9 @@ DO
 }
 
 FORM (MODIFY_Table_appendProductColumn, U"Table: Append product column", nullptr) {
-	SENTENCE4 (column1, U"left Columns", U"")
-	SENTENCE4 (column2, U"right Columns", U"")
-	SENTENCE4 (label, U"Label", U"prod")
+	SENTENCE (column1, U"left Columns", U"")
+	SENTENCE (column2, U"right Columns", U"")
+	SENTENCE (label, U"Label", U"prod")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -733,9 +733,9 @@ DO
 }
 
 FORM (MODIFY_Table_appendQuotientColumn, U"Table: Append quotient column", nullptr) {
-	SENTENCE4 (column1, U"left Columns", U"")
-	SENTENCE4 (column2, U"right Columns", U"")
-	SENTENCE4 (label, U"Label", U"quot")
+	SENTENCE (column1, U"left Columns", U"")
+	SENTENCE (column2, U"right Columns", U"")
+	SENTENCE (label, U"Label", U"quot")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -746,9 +746,9 @@ DO
 }
 
 FORM (MODIFY_Table_appendSumColumn, U"Table: Append sum column", nullptr) {
-	SENTENCE4 (column1, U"left Columns", U"")
-	SENTENCE4 (column2, U"right Columns", U"")
-	SENTENCE4 (label, U"Label", U"sum")
+	SENTENCE (column1, U"left Columns", U"")
+	SENTENCE (column2, U"right Columns", U"")
+	SENTENCE (label, U"Label", U"sum")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -765,8 +765,8 @@ DIRECT (MODIFY_Table_appendRow) {
 }
 
 FORM (MODIFY_Table_formula, U"Table: Formula", U"Table: Formula...") {
-	SENTENCE4 (columnLabel, U"Column (label)", U"")
-	TEXTFIELD4 (formula, U"formula", U"abs (self)")
+	SENTENCE (columnLabel, U"Column (label)", U"")
+	TEXTFIELD (formula, U"formula", U"abs (self)")
 	OK
 DO
 	MODIFY_EACH_WEAK (Table)
@@ -776,9 +776,9 @@ DO
 }
 
 FORM (MODIFY_Table_formula_columnRange, U"Table: Formula (column range)", U"Table: Formula...") {
-	SENTENCE4 (fromColumn, U"From column (label)", U"")
-	SENTENCE4 (toColumn, U"To column (label)", U"")
-	TEXTFIELD4 (formula, U"formula", U"log10 (self)")
+	SENTENCE (fromColumn, U"From column (label)", U"")
+	SENTENCE (toColumn, U"To column (label)", U"")
+	TEXTFIELD (formula, U"formula", U"log10 (self)")
 	OK
 DO
 	MODIFY_EACH_WEAK (Table)
@@ -789,8 +789,8 @@ DO
 }
 
 FORM (MODIFY_Table_insertColumn, U"Table: Insert column", nullptr) {
-	NATURAL4 (position, U"Position", U"1")
-	SENTENCE4 (label, U"Label", U"newcolumn")
+	NATURAL (position, U"Position", U"1")
+	SENTENCE (label, U"Label", U"newcolumn")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -799,7 +799,7 @@ DO
 }
 
 FORM (MODIFY_Table_insertRow, U"Table: Insert row", nullptr) {
-	NATURAL4 (position, U"Position", U"1")
+	NATURAL (position, U"Position", U"1")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -808,7 +808,7 @@ DO
 }
 
 FORM (MODIFY_Table_removeColumn, U"Table: Remove column", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"")
+	SENTENCE (columnLabel, U"Column label", U"")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -818,7 +818,7 @@ DO
 }
 
 FORM (MODIFY_Table_removeRow, U"Table: Remove row", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -827,8 +827,8 @@ DO
 }
 
 FORM (MODIFY_Table_setColumnLabel_index, U"Set column label", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
-	SENTENCE4 (newLabel, U"New label", U"")
+	NATURAL (columnNumber, U"Column number", U"1")
+	SENTENCE (newLabel, U"New label", U"")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -837,8 +837,8 @@ DO
 }
 
 FORM (MODIFY_Table_setColumnLabel_label, U"Set column label", nullptr) {
-	SENTENCE4 (oldLabel, U"Old label", U"")
-	SENTENCE4 (newLabel, U"New label", U"")
+	SENTENCE (oldLabel, U"Old label", U"")
+	SENTENCE (newLabel, U"New label", U"")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -848,9 +848,9 @@ DO
 }
 
 FORM (MODIFY_Table_setNumericValue, U"Table: Set numeric value", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
-	SENTENCE4 (columnLabel, U"Column label", U"")
-	REAL_OR_UNDEFINED4 (numericValue, U"Numeric value", U"1.5")
+	NATURAL (rowNumber, U"Row number", U"1")
+	SENTENCE (columnLabel, U"Column label", U"")
+	REAL_OR_UNDEFINED (numericValue, U"Numeric value", U"1.5")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -860,9 +860,9 @@ DO
 }
 
 FORM (MODIFY_Table_setStringValue, U"Table: Set string value", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
-	SENTENCE4 (columnLabel, U"Column label", U"")
-	SENTENCE4 (stringValue, U"String value", U"xx")
+	NATURAL (rowNumber, U"Row number", U"1")
+	SENTENCE (columnLabel, U"Column label", U"")
+	SENTENCE (stringValue, U"String value", U"xx")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -885,7 +885,7 @@ DIRECT (MODIFY_Table_reflectRows) {
 
 FORM (MODIFY_Table_sortRows, U"Table: Sort rows", nullptr) {
 	LABEL (U"", U"One or more column labels for sorting:")
-	TEXTFIELD4 (columnLabels, U"columnLabels", U"dialect gender name")
+	TEXTFIELD (columnLabels, U"columnLabels", U"dialect gender name")
 	OK
 DO
 	MODIFY_EACH (Table)
@@ -897,17 +897,17 @@ DO
 
 FORM (NEW_Table_collapseRows, U"Table: Collapse rows", nullptr) {
 	LABEL (U"", U"Columns with factors (independent variables):")
-	TEXTFIELD4 (factors, U"factors", U"speaker dialect age vowel")
+	TEXTFIELD (factors, U"factors", U"speaker dialect age vowel")
 	LABEL (U"", U"Columns to sum:")
-	TEXTFIELD4 (columnsToSum, U"columnsToSum", U"number cost")
+	TEXTFIELD (columnsToSum, U"columnsToSum", U"number cost")
 	LABEL (U"", U"Columns to average:")
-	TEXTFIELD4 (columnsToAverage, U"columnsToAverage", U"price")
+	TEXTFIELD (columnsToAverage, U"columnsToAverage", U"price")
 	LABEL (U"", U"Columns to medianize:")
-	TEXTFIELD4 (columnsToMedianize, U"columnsToMedianize", U"vot")
+	TEXTFIELD (columnsToMedianize, U"columnsToMedianize", U"vot")
 	LABEL (U"", U"Columns to average logarithmically:")
-	TEXTFIELD4 (columnsToAverageLogarithmically, U"columnsToAverageLogarithmically", U"duration")
+	TEXTFIELD (columnsToAverageLogarithmically, U"columnsToAverageLogarithmically", U"duration")
 	LABEL (U"", U"Columns to medianize logarithmically:")
-	TEXTFIELD4 (columnsToMedianizeLogarithmically, U"columnsToMedianizeLogarithmically", U"F0 F1 F2 F3")
+	TEXTFIELD (columnsToMedianizeLogarithmically, U"columnsToMedianizeLogarithmically", U"F0 F1 F2 F3")
 	LABEL (U"", U"Columns not mentioned above will be ignored.")
 	OK
 DO
@@ -924,9 +924,9 @@ DIRECT (NEW1_Tables_append) {
 }
 
 FORM (NEW_Table_extractRowsWhereColumn_number, U"Table: Extract rows where column (number)", nullptr) {
-	SENTENCE4 (extractAllRowsWhereColumn___, U"Extract all rows where column...", U"")
-	RADIO_ENUM4 (___is___, U"...is...", kMelder_number, DEFAULT)
-	REAL4 (___theNumber, U"...the number", U"0.0")
+	SENTENCE (extractAllRowsWhereColumn___, U"Extract all rows where column...", U"")
+	RADIO_ENUM (___is___, U"...is...", kMelder_number, DEFAULT)
+	REAL (___theNumber, U"...the number", U"0.0")
 	OK
 DO
 	CONVERT_EACH (Table)
@@ -937,9 +937,9 @@ DO
 }
 
 FORM (NEW_Table_extractRowsWhereColumn_text, U"Table: Extract rows where column (text)", nullptr) {
-	SENTENCE4 (extractAllRowsWhereColumn___, U"Extract all rows where column...", U"")
-	OPTIONMENU_ENUM4 (___, U"...", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"hi")
+	SENTENCE (extractAllRowsWhereColumn___, U"Extract all rows where column...", U"")
+	OPTIONMENU_ENUM (___, U"...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"hi")
 	OK
 DO
 	CONVERT_EACH (Table)
@@ -956,10 +956,10 @@ DIRECT (NEW_Table_transpose) {
 
 FORM (NEW_Table_rowsToColumns, U"Table: Rows to columns", nullptr) {
 	LABEL (U"", U"Columns with factors (independent variables):")
-	TEXTFIELD4 (factors, U"factors", U"dialect gender speaker")
-	SENTENCE4 (columnToTranspose, U"Column to transpose", U"vowel")
+	TEXTFIELD (factors, U"factors", U"dialect gender speaker")
+	SENTENCE (columnToTranspose, U"Column to transpose", U"vowel")
 	LABEL (U"", U"Columns to expand:")
-	TEXTFIELD4 (columnsToExpand, U"columnsToExpand", U"duration F0 F1 F2 F3")
+	TEXTFIELD (columnsToExpand, U"columnsToExpand", U"duration F0 F1 F2 F3")
 	LABEL (U"", U"Columns not mentioned above will be ignored.")
 	OK
 DO
@@ -977,9 +977,9 @@ DIRECT (NEW_Table_to_LinearRegression) {
 
 FORM (NEW_Table_to_LogisticRegression, U"Table: To LogisticRegression", nullptr) {
 	LABEL (U"", U"Factors (column names):")
-	TEXTFIELD4 (factors, U"factors", U"F0 F1 duration")
-	SENTENCE4 (dependent1, U"Dependent 1 (column name)", U"e")
-	SENTENCE4 (dependent2, U"Dependent 2 (column name)", U"i")
+	TEXTFIELD (factors, U"factors", U"F0 F1 duration")
+	SENTENCE (dependent1, U"Dependent 1 (column name)", U"e")
+	SENTENCE (dependent2, U"Dependent 2 (column name)", U"i")
 	OK
 DO
 	CONVERT_EACH (Table)
@@ -988,7 +988,7 @@ DO
 }
 
 FORM (NEW_Table_to_TableOfReal, U"Table: Down to TableOfReal", nullptr) {
-	SENTENCE4 (columnForRowLabels, U"Column for row labels", U"")
+	SENTENCE (columnForRowLabels, U"Column for row labels", U"")
 	OK
 DO
 	CONVERT_EACH (Table)
@@ -998,9 +998,9 @@ DO
 }
 
 FORM (NEW1_TableOfReal_create, U"Create TableOfReal", nullptr) {
-	WORD4 (name, U"Name", U"table")
-	NATURAL4 (numberOfRows, U"Number of rows", U"10")
-	NATURAL4 (numberOfColumns, U"Number of columns", U"3")
+	WORD (name, U"Name", U"table")
+	NATURAL (numberOfRows, U"Number of rows", U"10")
+	NATURAL (numberOfColumns, U"Number of columns", U"3")
 	OK
 DO
 	CREATE_ONE
@@ -1014,7 +1014,7 @@ FORM_READ (READ1_TableOfReal_readFromHeaderlessSpreadsheetFile, U"Read TableOfRe
 	READ_ONE_END
 }
 
-static bool isTabSeparated_8bit (int nread, const char *header) {
+static bool isTabSeparated_8bit (integer nread, const char *header) {
 	for (long i = 0; i < nread; i ++) {
 		if (header [i] == '\t') return true;
 		if (header [i] == '\n' || header [i] == '\r') return false;
@@ -1022,7 +1022,7 @@ static bool isTabSeparated_8bit (int nread, const char *header) {
 	return false;
 }
 
-static bool isTabSeparated_utf16be (int nread, const char *header) {
+static bool isTabSeparated_utf16be (integer nread, const char *header) {
 	for (long i = 2; i < nread; i += 2) {
 		if (header [i] == '\0' && header [i + 1] == '\t') return true;
 		if (header [i] == '\0' && (header [i + 1] == '\n' || header [i + 1] == '\r')) return false;
@@ -1030,7 +1030,7 @@ static bool isTabSeparated_utf16be (int nread, const char *header) {
 	return false;
 }
 
-static bool isTabSeparated_utf16le (int nread, const char *header) {
+static bool isTabSeparated_utf16le (integer nread, const char *header) {
 	for (long i = 2; i < nread; i += 2) {
 		if (header [i + 1] == '\0' && header [i] == '\t') return true;
 		if (header [i + 1] == '\0' && (header [i] == '\n' || header [i] == '\r')) return false;
@@ -1038,7 +1038,7 @@ static bool isTabSeparated_utf16le (int nread, const char *header) {
 	return false;
 }
 
-static autoDaata tabSeparatedFileRecognizer (int nread, const char *header, MelderFile file) {
+static autoDaata tabSeparatedFileRecognizer (integer nread, const char *header, MelderFile file) {
 	/*
 	 * A table is recognized if it has at least one tab symbol,
 	 * which must be before the first newline symbol (if any).
diff --git a/stat/praat_TableOfReal.cpp b/stat/praat_TableOfReal.cpp
index 55abb0d..6e78a1e 100644
--- a/stat/praat_TableOfReal.cpp
+++ b/stat/praat_TableOfReal.cpp
@@ -33,14 +33,14 @@ DIRECT (HELP_TableOfReal_help) {
 // MARK: Draw
 
 FORM (GRAPHICS_TableOfReal_drawAsNumbers, U"Draw as numbers", nullptr) {
-	NATURAL4 (fromRow, U"From row", U"1")
-	INTEGER4 (toRow, U"To row", U"0 (= all)")
-	RADIO4 (format, U"Format", 3)
+	NATURAL (fromRow, U"From row", U"1")
+	INTEGER (toRow, U"To row", U"0 (= all)")
+	RADIO (format, U"Format", 3)
 		RADIOBUTTON (U"decimal")
 		RADIOBUTTON (U"exponential")
 		RADIOBUTTON (U"free")
 		RADIOBUTTON (U"rational")
-	NATURAL4 (precision, U"Precision", U"5")
+	NATURAL (precision, U"Precision", U"5")
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -49,16 +49,16 @@ DO
 }
 
 FORM (GRAPHICS_TableOfReal_drawAsNumbers_if, U"Draw as numbers if...", nullptr) {
-	NATURAL4 (fromRow, U"From row", U"1")
-	INTEGER4 (toRow, U"To row", U"0 (= all)")
-	RADIO4 (format, U"Format", 3)
+	NATURAL (fromRow, U"From row", U"1")
+	INTEGER (toRow, U"To row", U"0 (= all)")
+	RADIO (format, U"Format", 3)
 		RADIOBUTTON (U"decimal")
 		RADIOBUTTON (U"exponential")
 		RADIOBUTTON (U"free")
 		RADIOBUTTON (U"rational")
-	NATURAL4 (precision, U"Precision", U"5")
+	NATURAL (precision, U"Precision", U"5")
 	LABEL (U"", U"Condition:")
-	TEXTFIELD4 (condition, U"condition", U"self <> 0")
+	TEXTFIELD (condition, U"condition", U"self <> 0")
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -67,11 +67,11 @@ DO
 }
 
 FORM (GRAPHICS_TableOfReal_drawAsSquares, U"Draw table as squares", nullptr) {
-	NATURAL4 (fromRow, U"From row", U"1")
-	INTEGER4 (toRow, U"To row", U"0 (= all)")
-	NATURAL4 (fromColumn, U"From column", U"1")
-	INTEGER4 (toColumn, U"To column", U"0")
-	BOOLEAN4 (garnish, U"Garnish", true)
+	NATURAL (fromRow, U"From row", U"1")
+	INTEGER (toRow, U"To row", U"0 (= all)")
+	NATURAL (fromColumn, U"From column", U"1")
+	INTEGER (toColumn, U"To column", U"0")
+	BOOLEAN (garnish, U"Garnish", true)
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -80,8 +80,8 @@ DO
 }
 
 FORM (GRAPHICS_TableOfReal_drawHorizontalLines, U"Draw horizontal lines", nullptr) {
-	NATURAL4 (fromRow, U"From row", U"1")
-	INTEGER4 (toRow, U"To row", U"0 (= all)")
+	NATURAL (fromRow, U"From row", U"1")
+	INTEGER (toRow, U"To row", U"0 (= all)")
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -90,8 +90,8 @@ DO
 }
 
 FORM (GRAPHICS_TableOfReal_drawLeftAndRightLines, U"Draw left and right lines", nullptr) {
-	NATURAL4 (fromRow, U"From row", U"1")
-	INTEGER4 (toRow, U"To row", U"0 (= all)")
+	NATURAL (fromRow, U"From row", U"1")
+	INTEGER (toRow, U"To row", U"0 (= all)")
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -100,8 +100,8 @@ DO
 }
 
 FORM (GRAPHICS_TableOfReal_drawTopAndBottomLines, U"Draw top and bottom lines", nullptr) {
-	NATURAL4 (fromRow, U"From row", U"1")
-	INTEGER4 (toRow, U"To row", U"0 (= all)")
+	NATURAL (fromRow, U"From row", U"1")
+	INTEGER (toRow, U"To row", U"0 (= all)")
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -110,8 +110,8 @@ DO
 }
 
 FORM (GRAPHICS_TableOfReal_drawVerticalLines, U"Draw vertical lines", nullptr) {
-	NATURAL4 (fromRow, U"From row", U"1")
-	INTEGER4 (toRow, U"To row", U"0 (= all)")
+	NATURAL (fromRow, U"From row", U"1")
+	INTEGER (toRow, U"To row", U"0 (= all)")
 	OK
 DO
 	GRAPHICS_EACH (TableOfReal)
@@ -122,7 +122,7 @@ DO
 // MARK: Query
 
 FORM (INTEGER_TableOfReal_getColumnIndex, U"Get column index", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"")
+	SENTENCE (columnLabel, U"Column label", U"")
 	OK
 DO
 	NUMBER_ONE (TableOfReal)
@@ -131,7 +131,7 @@ DO
 }
 	
 FORM (STRING_TableOfReal_getColumnLabel, U"Get column label", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	STRING_ONE (TableOfReal)
@@ -142,7 +142,7 @@ DO
 }
 	
 FORM (REAL_TableOfReal_getColumnMean_index, U"Get column mean", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	NUMBER_ONE (TableOfReal)
@@ -153,7 +153,7 @@ DO
 }
 
 FORM (REAL_TableOfReal_getColumnMean_label, U"Get column mean", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"")
+	SENTENCE (columnLabel, U"Column label", U"")
 	OK
 DO
 	NUMBER_ONE (TableOfReal)
@@ -164,7 +164,7 @@ DO
 }
 
 FORM (REAL_TableOfReal_getColumnStdev_index, U"Get column standard deviation", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	NUMBER_ONE (TableOfReal)
@@ -175,7 +175,7 @@ DO
 }
 
 FORM (REAL_TableOfReal_getColumnStdev_label, U"Get column standard deviation", nullptr) {
-	SENTENCE4 (columnLabel, U"Column label", U"1")
+	SENTENCE (columnLabel, U"Column label", U"1")
 	OK
 DO
 	NUMBER_ONE (TableOfReal)
@@ -198,7 +198,7 @@ DIRECT (INTEGER_TableOfReal_getNumberOfRows) {
 }
 
 FORM (INTEGER_TableOfReal_getRowIndex, U"Get row index", nullptr) {
-	SENTENCE4 (rowLabel, U"Row label", U"")
+	SENTENCE (rowLabel, U"Row label", U"")
 	OK
 DO
 	NUMBER_ONE (TableOfReal)
@@ -207,7 +207,7 @@ DO
 }
 
 FORM (STRING_TableOfReal_getRowLabel, U"Get row label", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
 	OK
 DO
 	STRING_ONE (TableOfReal)
@@ -218,8 +218,8 @@ DO
 }
 
 FORM (REAL_TableOfReal_getValue, U"Get value", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	NUMBER_ONE (TableOfReal)
@@ -235,7 +235,7 @@ DO
 
 FORM (MODIFY_TableOfReal_formula, U"TableOfReal: Formula", U"Formula...") {
 	LABEL (U"", U"for row from 1 to nrow do for col from 1 to ncol do self [row, col] = ...")
-	TEXTFIELD4 (formula, U"formula", U"if col = 5 then self + self [6] else self fi")
+	TEXTFIELD (formula, U"formula", U"if col = 5 then self + self [6] else self fi")
 	OK
 DO
 	MODIFY_EACH_WEAK (TableOfReal)
@@ -244,7 +244,7 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_insertColumn, U"Insert column", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -253,7 +253,7 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_insertRow, U"Insert row", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -262,7 +262,7 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_removeColumn, U"Remove column", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -271,7 +271,7 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_removeRow, U"Remove row", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
+	NATURAL (rowNumber, U"Row number", U"1")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -280,8 +280,8 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_setColumnLabel_index, U"Set column label", nullptr) {
-	NATURAL4 (columnNumber, U"Column number", U"1")
-	SENTENCE4 (label, U"Label", U"")
+	NATURAL (columnNumber, U"Column number", U"1")
+	SENTENCE (label, U"Label", U"")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -290,8 +290,8 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_setColumnLabel_label, U"Set column label", nullptr) {
-	SENTENCE4 (oldLabel, U"Old label", U"")
-	SENTENCE4 (newLabel, U"New label", U"")
+	SENTENCE (oldLabel, U"Old label", U"")
+	SENTENCE (newLabel, U"New label", U"")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -301,8 +301,8 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_setRowLabel_index, U"Set row label", nullptr) {
-	NATURAL4 (rowNumber, U"Row number", U"1")
-	SENTENCE4 (label, U"Label", U"")
+	NATURAL (rowNumber, U"Row number", U"1")
+	SENTENCE (label, U"Label", U"")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -311,9 +311,9 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_setValue, U"Set value", U"TableOfReal: Set value...") {
-	NATURAL4 (rowNumber, U"Row number", U"1")
-	NATURAL4 (columnNumber, U"Column number", U"1")
-	REAL_OR_UNDEFINED4 (newValue, U"New value", U"0.0")
+	NATURAL (rowNumber, U"Row number", U"1")
+	NATURAL (columnNumber, U"Column number", U"1")
+	REAL_OR_UNDEFINED (newValue, U"New value", U"0.0")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -326,8 +326,8 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_setRowLabel_label, U"Set row label", nullptr) {
-	SENTENCE4 (oldLabel, U"Old label", U"")
-	WORD4 (newLabel, U"New label", U"")
+	SENTENCE (oldLabel, U"Old label", U"")
+	WORD (newLabel, U"New label", U"")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -337,8 +337,8 @@ DO
 }
 
 FORM (MODIFY_TableOfReal_sortByColumn, U"Sort rows by column", nullptr) {
-	INTEGER4 (column, U"Column", U"1")
-	INTEGER4 (secondaryColumn, U"Secondary column", U"0")
+	INTEGER (column, U"Column", U"1")
+	INTEGER (secondaryColumn, U"Secondary column", U"0")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -348,8 +348,8 @@ DO
 
 FORM (MODIFY_TableOfReal_sortByLabel, U"Sort rows by label", nullptr) {
 	LABEL (U"", U"Secondary sorting keys:")
-	INTEGER4 (column1, U"Column1", U"1")
-	INTEGER4 (column2, U"Column2", U"0")
+	INTEGER (column1, U"Column1", U"1")
+	INTEGER (column2, U"Column2", U"0")
 	OK
 DO
 	MODIFY_EACH (TableOfReal)
@@ -367,7 +367,7 @@ DIRECT (NEW_TableOfReal_extractColumnLabelsAsStrings) {
 
 FORM (NEW_TableOfReal_extractColumnRanges, U"Extract column ranges", nullptr) {
 	LABEL (U"", U"Create a new TableOfReal from the following columns:")
-	TEXTFIELD4 (ranges, U"ranges", U"1 2")
+	TEXTFIELD (ranges, U"ranges", U"1 2")
 	LABEL (U"", U"To supply rising or falling ranges, use e.g. 2:6 or 5:3.")
 	OK
 DO
@@ -378,7 +378,7 @@ DO
 
 FORM (NEW_TableOfReal_extractColumnsWhere, U"Extract columns where", nullptr) {
 	LABEL (U"", U"Extract all columns with at least one cell where:")
-	TEXTFIELD4 (condition, U"condition", U"col mod 3 = 0 ; this example extracts every third column")
+	TEXTFIELD (condition, U"condition", U"col mod 3 = 0 ; this example extracts every third column")
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
@@ -387,8 +387,8 @@ DO
 }
 
 FORM (NEW_TableOfReal_extractColumnsWhereLabel, U"Extract column where label", nullptr) {
-	OPTIONMENU_ENUM4 (extractAllColumnsWhoseLabel, U"Extract all columns whose label...", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"a")
+	OPTIONMENU_ENUM (extractAllColumnsWhoseLabel, U"Extract all columns whose label...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"a")
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
@@ -397,9 +397,9 @@ DO
 }
 
 FORM (NEW_TableOfReal_extractColumnsWhereRow, U"Extract columns where row", nullptr) {
-	NATURAL4 (extractAllColumnsWhereRow, U"Extract all columns where row...", U"1")
-	OPTIONMENU_ENUM4 (___is___, U"...is...", kMelder_number, DEFAULT)
-	REAL4 (___theValue, U"...the value", U"0.0")
+	NATURAL (extractAllColumnsWhereRow, U"Extract all columns where row...", U"1")
+	OPTIONMENU_ENUM (___is___, U"...is...", kMelder_number, DEFAULT)
+	REAL (___theValue, U"...the value", U"0.0")
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
@@ -415,7 +415,7 @@ DIRECT (NEW_TableOfReal_extractRowLabelsAsStrings) {
 
 FORM (NEW_TableOfReal_extractRowRanges, U"Extract row ranges", nullptr) {
 	LABEL (U"", U"Create a new TableOfReal from the following rows:")
-	TEXTFIELD4 (ranges, U"ranges", U"1 2")
+	TEXTFIELD (ranges, U"ranges", U"1 2")
 	LABEL (U"", U"To supply rising or falling ranges, use e.g. 2:6 or 5:3.")
 	OK
 DO
@@ -426,7 +426,7 @@ DO
 
 FORM (NEW_TableOfReal_extractRowsWhere, U"Extract rows where", nullptr) {
 	LABEL (U"", U"Extract all rows with at least one cell where:")
-	TEXTFIELD4 (condition, U"condition", U"row mod 3 = 0 ; this example extracts every third row")
+	TEXTFIELD (condition, U"condition", U"row mod 3 = 0 ; this example extracts every third row")
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
@@ -435,9 +435,9 @@ DO
 }
 
 FORM (NEW_TableOfReal_extractRowsWhereColumn, U"Extract rows where column", nullptr) {
-	NATURAL4 (extractAllRowsWhereColumn, U"Extract all rows where column...", U"1")
-	OPTIONMENU_ENUM4 (___is___, U"...is...", kMelder_number, DEFAULT)
-	REAL4 (___theValue, U"...the value", U"0.0")
+	NATURAL (extractAllRowsWhereColumn, U"Extract all rows where column...", U"1")
+	OPTIONMENU_ENUM (___is___, U"...is...", kMelder_number, DEFAULT)
+	REAL (___theValue, U"...the value", U"0.0")
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
@@ -446,8 +446,8 @@ DO
 }
 
 FORM (NEW_TableOfReal_extractRowsWhereLabel, U"Extract rows where label", nullptr) {
-	OPTIONMENU_ENUM4 (extractAllRowsWhoseLabel, U"Extract all rows whose label...", kMelder_string, DEFAULT)
-	SENTENCE4 (___theText, U"...the text", U"a")
+	OPTIONMENU_ENUM (extractAllRowsWhoseLabel, U"Extract all rows whose label...", kMelder_string, DEFAULT)
+	SENTENCE (___theText, U"...the text", U"a")
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
@@ -471,7 +471,7 @@ DIRECT (NEW_TableOfReal_to_Matrix) {
 }
 
 FORM (NEW_TableOfReal_to_Table, U"TableOfReal: To Table", nullptr) {
-	SENTENCE4 (labelOfFirstColumn, U"Label of first column", U"rowLabel")
+	SENTENCE (labelOfFirstColumn, U"Label of first column", U"rowLabel")
 	OK
 DO
 	CONVERT_EACH (TableOfReal)
diff --git a/sys/Data.cpp b/sys/Data.cpp
index 62ae708..0ed8fb6 100644
--- a/sys/Data.cpp
+++ b/sys/Data.cpp
@@ -239,7 +239,7 @@ autoDaata Data_readFromBinaryFile (MelderFile file) {
 	try {
 		autofile f = Melder_fopen (file, "rb");
 		char line [200];
-		int n = fread (line, 1, 199, f); line [n] = '\0';
+		size_t n = fread (line, 1, 199, f); line [n] = '\0';
 		/*
 			Allow for a future version of binary files, which can handle 64-bit integers
 			and are perhaps written in little-endian format.
@@ -303,7 +303,8 @@ void Data_recognizeFileType (Data_FileTypeRecognizer recognizer) {
 autoDaata Data_readFromFile (MelderFile file) {
 	char header [513];
 	autofile f = Melder_fopen (file, "rb");
-	int nread = fread (& header [0], 1, 512, f);
+	size_t nread_u = fread (& header [0], 1, 512, f);
+	integer nread = (integer) nread_u;   // we know it cannot be more than 512
 	f.close (file);
 	header [nread] = 0;
 
diff --git a/sys/Data.h b/sys/Data.h
index 920576b..d185240 100644
--- a/sys/Data.h
+++ b/sys/Data.h
@@ -259,7 +259,7 @@ autoDaata Data_readFromBinaryFile (MelderFile file);
 		(plus those from Data_readBinary)
 */
 
-typedef autoDaata (*Data_FileTypeRecognizer) (int numberOfBytesRead, const char *header, MelderFile file);
+typedef autoDaata (*Data_FileTypeRecognizer) (integer numberOfBytesRead, const char *header, MelderFile file);
 
 void Data_recognizeFileType (Data_FileTypeRecognizer recognizer);
 /*
diff --git a/sys/Formula.cpp b/sys/Formula.cpp
index 0352c84..d12e4cb 100644
--- a/sys/Formula.cpp
+++ b/sys/Formula.cpp
@@ -4852,6 +4852,13 @@ static void do_object_xmin () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"xmin\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetXmin ()) {
+			pushNumber (data -> v_getXmin ());
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"xmin\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].xmin\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
@@ -4868,6 +4875,13 @@ static void do_object_xmax () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"xmax\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetXmax ()) {
+			pushNumber (data -> v_getXmax ());
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"xmax\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].xmax\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
@@ -4884,6 +4898,13 @@ static void do_object_ymin () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"ymin\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetYmin ()) {
+			pushNumber (data -> v_getYmin ());
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"ymin\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].ymin\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
@@ -4900,6 +4921,13 @@ static void do_object_ymax () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"ymax\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetYmax ()) {
+			pushNumber (data -> v_getYmax ());
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"ymax\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].ymax\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
@@ -4916,6 +4944,13 @@ static void do_object_nx () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"nx\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetNx ()) {
+			pushNumber (data -> v_getNx ());
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"nx\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].nx\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
@@ -4932,6 +4967,13 @@ static void do_object_ny () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"ny\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetNy ()) {
+			pushNumber (data -> v_getNy ());
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"ny\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].ny\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
@@ -4948,6 +4990,13 @@ static void do_object_dx () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"dx\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetDx ()) {
+			pushNumber (data -> v_getDx ());
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"dx\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].dx\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
@@ -4964,6 +5013,13 @@ static void do_object_dy () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"dy\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetDy ()) {
+			pushNumber (data -> v_getDy ());
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"dy\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].dy\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
@@ -4980,6 +5036,13 @@ static void do_object_nrow () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"nrow\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetNrow ()) {
+			pushNumber (data -> v_getNrow ());
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"nrow\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].nrow\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
@@ -4996,6 +5059,13 @@ static void do_object_ncol () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"ncol\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetNcol ()) {
+			pushNumber (data -> v_getNcol ());
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"ncol\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].ncol\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
@@ -5020,6 +5090,21 @@ static void do_object_rowstr () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"row$[]\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetRowStr ()) {
+			if (index -> which == Stackel_NUMBER) {
+				long number = lround (index->number);
+				autostring32 result = Melder_dup (data -> v_getRowStr (number));
+				if (! result.peek())
+					Melder_throw (U"Row index out of bounds.");
+				pushString (result.transfer());
+			} else {
+				Melder_throw (U"The expression \"object[].row$[xx]\" requires xx to be a number, not ", Stackel_whichText (index), U".");
+			}
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"row$[]\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].row$[]\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
@@ -5044,6 +5129,21 @@ static void do_object_colstr () {
 		} else {
 			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"col$[]\" attribute.");
 		}
+	} else if (object -> which == Stackel_OBJECT) {
+		Daata data = object -> object;
+		if (data -> v_hasGetColStr ()) {
+			if (index -> which == Stackel_NUMBER) {
+				long number = lround (index->number);
+				autostring32 result = Melder_dup (data -> v_getColStr (number));
+				if (! result.peek())
+					Melder_throw (U"Column index out of bounds.");
+				pushString (result.transfer());
+			} else {
+				Melder_throw (U"The expression \"object[].col$[xx]\" requires xx to be a number, not ", Stackel_whichText (index), U".");
+			}
+		} else {
+			Melder_throw (U"An object of type ", Thing_className (data), U" has no \"col$[]\" attribute.");
+		}
 	} else {
 		Melder_throw (U"The expression \"object[xx].col$[]\" requires xx to be a number or a string, not ", Stackel_whichText (object), U".");
 	}
diff --git a/sys/HyperPage.cpp b/sys/HyperPage.cpp
index 0eb41ca..8310da9 100644
--- a/sys/HyperPage.cpp
+++ b/sys/HyperPage.cpp
@@ -630,12 +630,17 @@ static void gui_drawingarea_cb_click (HyperPage me, GuiDrawingArea_ClickEvent ev
 	}
 }
 
-static void menu_cb_postScriptSettings (HyperPage me, EDITOR_ARGS_DIRECT) {
-	Printer_postScriptSettings ();
+extern "C" void GRAPHICS_PostScript_settings (UiForm sendingForm, int narg, Stackel args, const char32 *sendingString, Interpreter interpreter, const char32 *invokingButtonTitle, bool modified, void *buttonClosure);
+
+static void menu_cb_postScriptSettings (HyperPage me, EDITOR_ARGS_FORM) {
+	(void) me;
+	(void) cmd;
+	GRAPHICS_PostScript_settings (sendingForm, narg, args, sendingString, interpreter, nullptr, false, nullptr);
 }
 
 #ifdef macintosh
 static void menu_cb_pageSetup (HyperPage me, EDITOR_ARGS_DIRECT) {
+	(void) me;
 	Printer_pageSetup ();
 }
 #endif
diff --git a/sys/Interpreter.cpp b/sys/Interpreter.cpp
index 7188a1d..1c83df8 100644
--- a/sys/Interpreter.cpp
+++ b/sys/Interpreter.cpp
@@ -41,6 +41,9 @@ extern structMelderDir praatDir;
 #define Interpreter_OPTION 12
 #define Interpreter_COMMENT 13
 
+autonumvec theInterpreterNumvec;
+autonummat theInterpreterNummat;
+
 Thing_implement (InterpreterVariable, SimpleString, 0);
 
 void structInterpreterVariable :: v_destroy () noexcept {
@@ -2031,11 +2034,21 @@ void Interpreter_run (Interpreter me, char32 *text) {
 								while (Melder_isblank (*p)) p ++;   // go to first token after assignment
 								if (*p == U'\0')
 									Melder_throw (U"Missing right-hand expression in assignment to matrix ", matrixName.string, U".");
-								nummat value;
-								bool owned;
-								Interpreter_numericMatrixExpression (me, p, & value, & owned);
-								InterpreterVariable var = Interpreter_lookUpVariable (me, matrixName.string);
-								NumericMatrixVariable_move (var, value, owned);
+								if (isCommand (p)) {
+									/*
+										Statement like: values## = Get all values
+									*/
+									praat_executeCommand (me, p);
+									InterpreterVariable var = Interpreter_lookUpVariable (me, matrixName.string);
+									var -> numericMatrixValue.reset();
+									var -> numericMatrixValue = theInterpreterNummat.releaseToAmbiguousOwner();
+								} else {
+									nummat value;
+									bool owned;
+									Interpreter_numericMatrixExpression (me, p, & value, & owned);
+									InterpreterVariable var = Interpreter_lookUpVariable (me, matrixName.string);
+									NumericMatrixVariable_move (var, value, owned);
+								}
 							} else if (*p == U'[') {
 								assignToNumericMatrixElement (me, ++ p, matrixName.string, valueString);
 							} else if (*p == U'+' && p [1] == U'=') {
@@ -2136,11 +2149,21 @@ void Interpreter_run (Interpreter me, char32 *text) {
 								while (Melder_isblank (*p)) p ++;   // go to first token after assignment
 								if (*p == U'\0')
 									Melder_throw (U"Missing right-hand expression in assignment to vector ", vectorName.string, U".");
-								numvec value;
-								bool owned;
-								Interpreter_numericVectorExpression (me, p, & value, & owned);
-								InterpreterVariable var = Interpreter_lookUpVariable (me, vectorName.string);
-								NumericVectorVariable_move (var, value, owned);
+								if (isCommand (p)) {
+									/*
+										Statement like: times# = Get all times
+									*/
+									praat_executeCommand (me, p);
+									InterpreterVariable var = Interpreter_lookUpVariable (me, vectorName.string);
+									var -> numericVectorValue.reset();
+									var -> numericVectorValue = theInterpreterNumvec.releaseToAmbiguousOwner();
+								} else {
+									numvec value;
+									bool owned;
+									Interpreter_numericVectorExpression (me, p, & value, & owned);
+									InterpreterVariable var = Interpreter_lookUpVariable (me, vectorName.string);
+									NumericVectorVariable_move (var, value, owned);
+								}
 							} else if (*p == U'[') {
 								assignToNumericVectorElement (me, ++ p, vectorName.string, valueString);
 							} else if (*p == U'+' && p [1] == U'=') {
diff --git a/sys/Interpreter.h b/sys/Interpreter.h
index f751f91..6309630 100644
--- a/sys/Interpreter.h
+++ b/sys/Interpreter.h
@@ -87,5 +87,8 @@ void Interpreter_anyExpression (Interpreter me, const char32 *expression, Formul
 InterpreterVariable Interpreter_hasVariable (Interpreter me, const char32 *key);
 InterpreterVariable Interpreter_lookUpVariable (Interpreter me, const char32 *key);
 
+extern autonumvec theInterpreterNumvec;
+extern autonummat theInterpreterNummat;
+
 /* End of file Interpreter.h */
 #endif
diff --git a/sys/Printer.cpp b/sys/Printer.cpp
index 777a7b0..71e547d 100644
--- a/sys/Printer.cpp
+++ b/sys/Printer.cpp
@@ -147,71 +147,6 @@ int Printer_pageSetup () {
 	return 1;
 }
 
-static void DO_Printer_postScriptSettings (UiForm dia, int /* narg */, Stackel /* args */,
-	const char32 * /* sendingString_dummy */, Interpreter /* interpreter_dummy */,
-	const char32 * /* invokingButtonTitle */, bool /* modified */, void *)
-{
-	#if defined (_WIN32)
-		thePrinter. allowDirectPostScript = GET_INTEGER (U"Allow direct PostScript");
-	#endif
-	thePrinter. spots = GET_ENUM (kGraphicsPostscript_spots, U"Grey resolution");
-	#if defined (UNIX)
-		thePrinter. paperSize = GET_ENUM (kGraphicsPostscript_paperSize, U"Paper size");
-	 	if (thePrinter. paperSize == kGraphicsPostscript_paperSize::A3) {
-	 		thePrinter. paperWidth = 842 * thePrinter. resolution / 72;
-	 		thePrinter. paperHeight = 1191 * thePrinter. resolution / 72;
-		} else if (thePrinter. paperSize == kGraphicsPostscript_paperSize::US_LETTER) {
-			thePrinter. paperWidth = 612 * thePrinter. resolution / 72;
-			thePrinter. paperHeight = 792 * thePrinter. resolution / 72;
-		} else {
-			thePrinter. paperWidth = 595 * thePrinter. resolution / 72;
-			thePrinter. paperHeight = 842 * thePrinter. resolution / 72;
-		}
-		thePrinter. orientation = GET_ENUM (kGraphicsPostscript_orientation, U"Orientation");
-		thePrinter. magnification = GET_REAL (U"Magnification");
-		Site_setPrintCommand (GET_STRING (U"printCommand"));
-	#endif
-	thePrinter. fontChoiceStrategy = GET_ENUM (kGraphicsPostscript_fontChoiceStrategy, U"Font choice strategy");
-}
-
-int Printer_postScriptSettings () {
-	static UiForm dia;
-	if (! dia) {
-		UiField radio;
-		dia = UiForm_create (theCurrentPraatApplication -> topShell, U"PostScript settings", DO_Printer_postScriptSettings, nullptr, U"PostScript settings...", U"PostScript settings...");
-		#if defined (_WIN32)
-			BOOLEAN (U"Allow direct PostScript", true);
-		#endif
-		RADIO_ENUM (U"Grey resolution", kGraphicsPostscript_spots, DEFAULT)
-		#if defined (UNIX)
-			RADIO_ENUM (U"Paper size", kGraphicsPostscript_paperSize, DEFAULT);
-			RADIO_ENUM (U"Orientation", kGraphicsPostscript_orientation, DEFAULT);
-			POSITIVE (U"Magnification", U"1.0");
-			LABEL (U"label", U"Print command:");
-			#if defined (linux)
-				TEXTFIELD (U"printCommand", U"lpr %s");
-			#else
-				TEXTFIELD (U"printCommand", U"lp -c %s");
-			#endif
-		#endif
-		RADIO_ENUM (U"Font choice strategy", kGraphicsPostscript_fontChoiceStrategy, DEFAULT);
-		UiForm_finish (dia);
-	}
-	#if defined (_WIN32)
-		SET_INTEGER (U"Allow direct PostScript", thePrinter. allowDirectPostScript);
-	#endif
-	SET_ENUM (U"Grey resolution", kGraphicsPostscript_spots, thePrinter. spots);
-	#if defined (UNIX)
-		SET_ENUM (U"Paper size", kGraphicsPostscript_paperSize, thePrinter. paperSize);
-		SET_ENUM (U"Orientation", kGraphicsPostscript_orientation, thePrinter. orientation);
-		SET_REAL (U"Magnification", thePrinter. magnification);
-		SET_STRING (U"printCommand", Site_getPrintCommand ());
-	#endif
-	SET_ENUM (U"Font choice strategy", kGraphicsPostscript_fontChoiceStrategy, thePrinter. fontChoiceStrategy);
-	UiForm_do (dia, false);
-	return 1;
-}
-
 #ifdef _WIN32
 	static BOOL CALLBACK AbortFunc (HDC hdc, int nCode) {
 		MSG msg;
diff --git a/sys/Ui.cpp b/sys/Ui.cpp
index fba3cb7..504b8c9 100644
--- a/sys/Ui.cpp
+++ b/sys/Ui.cpp
@@ -42,10 +42,12 @@
 	#define UI_LABELLEDTEXT_MAX  UI_CHANNEL
 #define UI_LABEL  10
 #define UI_TEXT  11
-#define UI_BOOLEAN  12
-#define UI_RADIO  13
-#define UI_OPTIONMENU  14
-#define UI_LIST  15
+#define UI_NUMVEC  12
+#define UI_NUMMAT  13
+#define UI_BOOLEAN  14
+#define UI_RADIO  15
+#define UI_OPTIONMENU  16
+#define UI_LIST  17
 
 Thing_implement (UiField, Thing, 0);
 
@@ -106,6 +108,7 @@ static void UiField_setDefault (UiField me) {
 	switch (my type) {
 		case UI_REAL: case UI_REAL_OR_UNDEFINED: case UI_POSITIVE: case UI_INTEGER: case UI_NATURAL:
 			case UI_WORD: case UI_SENTENCE: case UI_COLOUR: case UI_CHANNEL: case UI_TEXT:
+			case UI_NUMVEC: case UI_NUMMAT:
 		{
 			GuiText_setString (my text, my stringDefaultValue);
 		} break; case UI_BOOLEAN: {
@@ -234,6 +237,24 @@ static void UiField_widgetToValue (UiField me) {
 			Melder_free (my stringValue);
 			my stringValue = GuiText_getString (my text);
 			if (my stringVariable) *my stringVariable = my stringValue;
+		} break; case UI_NUMVEC: {
+			Melder_free (my stringValue);
+			my stringValue = GuiText_getString (my text);
+			if (my numericVectorVariable) {
+				numvec vec;
+				bool owned;
+				Interpreter_numericVectorExpression (nullptr, my stringValue, & vec, & owned);
+				*my numericVectorVariable = owned ? autonumvec (vec) : copy_numvec (vec);
+			}
+		} break; case UI_NUMMAT: {
+			Melder_free (my stringValue);
+			my stringValue = GuiText_getString (my text);
+			if (my numericMatrixVariable) {
+				nummat mat;
+				bool owned;
+				Interpreter_numericMatrixExpression (nullptr, my stringValue, & mat, & owned);
+				*my numericMatrixVariable = owned ? autonummat (mat) : copy_nummat (mat);
+			}
 		} break; case UI_BOOLEAN: {
 			my integerValue = GuiCheckButton_getValue (my checkButton);
 			if (my boolVariable) *my boolVariable = my integerValue;
@@ -434,24 +455,16 @@ static void gui_button_cb_cancel (UiForm me, GuiButtonEvent /* event */) {
 	if (my destroyWhenUnmanaged) forget (me);
 }
 
-void UiForm_widgetsToValues (UiForm me) {
-	try {
-		for (int ifield = 1; ifield <= my numberOfFields; ifield ++)
-			UiField_widgetToValue (my field [ifield]);
-	} catch (MelderError) {
-		Melder_throw (U"Please correct command window " U_LEFT_DOUBLE_QUOTE, my name, U_RIGHT_DOUBLE_QUOTE U" or cancel.");
-	}
-}
-
 static void UiForm_okOrApply (UiForm me, GuiButton button, int hide) {
 	if (my allowExecutionHook && ! my allowExecutionHook (my allowExecutionClosure)) {
 		Melder_flushError (U"Cannot execute command window " U_LEFT_DOUBLE_QUOTE, my name, U_RIGHT_DOUBLE_QUOTE U".");
 		return;
 	}
 	try {
-		UiForm_widgetsToValues (me);
+		for (int ifield = 1; ifield <= my numberOfFields; ifield ++)
+			UiField_widgetToValue (my field [ifield]);
 	} catch (MelderError) {
-		Melder_flushError ();
+		Melder_flushError (U"Please correct command window " U_LEFT_DOUBLE_QUOTE, my name, U_RIGHT_DOUBLE_QUOTE U" or cancel.");
 		return;
 	}
 	if (my okButton) GuiThing_setSensitive (my okButton, false);
@@ -759,6 +772,22 @@ UiField UiForm_addText4 (UiForm me, char32 **variable, const char32 *variableNam
 	return thee.releaseToAmbiguousOwner();
 }
 
+UiField UiForm_addNumvec (UiForm me, autonumvec *variable, const char32 *variableName, const char32 *name, const char32 *defaultValue) {
+	autoUiField thee (UiForm_addField (me, UI_NUMVEC, name));
+	thy stringDefaultValue = Melder_dup (defaultValue);
+	thy numericVectorVariable = variable;
+	thy variableName = variableName;
+	return thee.releaseToAmbiguousOwner();
+}
+
+UiField UiForm_addNummat (UiForm me, autonummat *variable, const char32 *variableName, const char32 *name, const char32 *defaultValue) {
+	autoUiField thee (UiForm_addField (me, UI_NUMMAT, name));
+	thy stringDefaultValue = Melder_dup (defaultValue);
+	thy numericMatrixVariable = variable;
+	thy variableName = variableName;
+	return thee.releaseToAmbiguousOwner();
+}
+
 UiField UiForm_addRadio (UiForm me, const char32 *label, int defaultValue) {
 	autoUiField thee (UiForm_addField (me, UI_RADIO, label));
 	thy integerDefaultValue = defaultValue;
@@ -930,6 +959,8 @@ void UiForm_finish (UiForm me) {
 				}
 			} break;
 			case UI_TEXT:
+			case UI_NUMVEC:
+			case UI_NUMMAT:
 			{
 				field -> text = GuiText_createShown (form, x, x + dialogWidth - Gui_LEFT_DIALOG_SPACING - Gui_RIGHT_DIALOG_SPACING,
 					y, y + Gui_TEXTFIELD_HEIGHT, 0);
diff --git a/sys/Ui.h b/sys/Ui.h
index 78f6b99..e2a0dfb 100644
--- a/sys/Ui.h
+++ b/sys/Ui.h
@@ -78,9 +78,11 @@ Thing_define (UiOption, Thing) {
 Thing_define (UiField, Thing) {
 	int type;
 	const char32 *formLabel;
-	double realValue, realDefaultValue;
+	double realValue;
 	long integerValue, integerDefaultValue;
 	char32 *stringValue; const char32 *stringDefaultValue;
+	autonumvec numericVectorValue;
+	autonummat numericMatrixValue;
 	Graphics_Colour colourValue;
 	char *stringValueA;
 	OrderedOf<structUiOption> options;
@@ -100,6 +102,8 @@ Thing_define (UiField, Thing) {
 	int *intVariable;
 	bool *boolVariable;
 	char32 **stringVariable;
+	autonumvec *numericVectorVariable;
+	autonummat *numericMatrixVariable;
 	int subtract;
 
 	void v_destroy () noexcept
@@ -173,6 +177,8 @@ UiField UiForm_addBoolean (UiForm me, const char32 *label, int defaultValue);
 UiField UiForm_addBoolean4 (UiForm me, bool *variable, const char32 *variableName, const char32 *label, int defaultValue);
 UiField UiForm_addText (UiForm me, const char32 *name, const char32 *defaultValue);
 UiField UiForm_addText4 (UiForm me, char32 **variable, const char32 *variableName, const char32 *name, const char32 *defaultValue);
+UiField UiForm_addNumvec (UiForm me, autonumvec *variable, const char32 *variableName, const char32 *name, const char32 *defaultValue);
+UiField UiForm_addNummat (UiForm me, autonummat *variable, const char32 *variableName, const char32 *name, const char32 *defaultValue);
 UiField UiForm_addRadio (UiForm me, const char32 *label, int defaultValue);
 UiField UiForm_addRadio4 (UiForm me, int *intVariable, char32 **stringVariable, const char32 *variableName, const char32 *label, int defaultValue, int base);
 UiOption UiRadio_addButton (UiField me, const char32 *label);
@@ -287,7 +293,6 @@ void UiHistory_clear ();
 
 void Ui_setAllowExecutionHook (bool (*allowExecutionHook) (void *closure), void *allowExecutionClosure);
 
-void UiForm_widgetsToValues (UiForm me);
 void UiForm_Interpreter_addVariables (UiForm me, Interpreter interpreter);
 int UiForm_getClickedContinueButton (UiForm me);
 
diff --git a/sys/melder_ftoa.cpp b/sys/melder_ftoa.cpp
index 2f432a9..5f68e41 100644
--- a/sys/melder_ftoa.cpp
+++ b/sys/melder_ftoa.cpp
@@ -363,7 +363,7 @@ const char32 * Melder_numvec (numvec value) {
 	}
 	return string -> string;
 }
-const char32 * Melder_nummat  (nummat value) {
+const char32 * Melder_nummat (nummat value) {
 	if (++ iTensorBuffer == NUMBER_OF_TENSOR_BUFFERS) iTensorBuffer = 0;
 	MelderString *string = & theTensorBuffers [iTensorBuffer];
 	MelderString_empty (string);
diff --git a/sys/praat.h b/sys/praat.h
index c97cc5d..dad91c9 100644
--- a/sys/praat.h
+++ b/sys/praat.h
@@ -204,57 +204,56 @@ void praat_new (autoDaata me, Melder_9_ARGS);
 void praat_newWithFile (autoDaata me, MelderFile file, const char32 *name);
 void praat_name2 (char32 *name, ClassInfo klas1, ClassInfo klas2);
 
-/* Macros for description of forms (dialog boxes).
+/* Macros for description of forms (dialog boxes, setting windows).
 	FORM prompts the user for arguments to proc.
 	Macros for FORM:
 	FORM (proc, title, helpString)
-		'proc' is the 'cb' argument of the corresponding VERB macro.
-		'title' is the title of the standard dialog, shown in its title bar.
-		'helpString' may be null.
-	INTEGER (name, initialString)
-	NATURAL (name, initialString)
-	REAL (name, initialString)
-	REAL_OR_UNDEFINED (name, initialString)
-	POSITIVE (name, initialString)
-	WORD (name, initialString)
-	SENTENCE (name, initialString)
-	COLOUR (name, initialString)
-	CHANNEL (name, initialString)
-		the name is also the string displayed in the label.
-	BOOLEAN (name, initialValue)
-		the name is also the title of the check box;
+		`proc` is the `cb` argument of the corresponding command call.
+		`title` is the title of the form, shown in its title bar.
+		`helpString` may be null.
+	INTEGER (variable, label, initialString)
+	NATURAL (variable, label, initialString)
+	REAL (variable, label, initialString)
+	REAL_OR_UNDEFINED (variable, label, initialString)
+	POSITIVE (variable, name, initialString)
+	WORD (variable, label, initialString)
+	SENTENCE (variable, label, initialString)
+	COLOUR (variable, label, initialString)
+	CHANNEL (variable, label, initialString)
+	BOOLEAN (variable, label, initialValue)
 		the initial value is 0 (off) or 1 (on).
-	LABEL (name, initialLabelString)
-		'name' is not shown but can still be used by the SETs
-	TEXTFIELD (name, initialString)
-		'name' is not shown but can still be used by the SETs
-	RADIO (name, initialValue)
-		the name is also the string displayed in the label;
-		this should be followed by two or more RADIOBUTTONs.
-		The initial value is between 1 and the number of radio buttons.
-	RADIOBUTTON (name)
-		the name is also the title of the button.
-	OPTIONMENU (name, initialValue)
-		the name is also the string displayed in the label;
-		this should be followed by two or more OPTIONs.
-		The initial value is between 1 and the number of options.
-	OPTION (name)
-		the name is also the title of the button.
+	LABEL (invisibleName, initialLabelString)
+		'invisibleName' is not shown but can still be used by the SETs
+	TEXTFIELD (variable, invisibleName, initialString)
+		'invisibleName' is not shown but can still be used by the SETs
+	NUMVEC (variable, invisibleName, initialString)
+		'invisibleName' is not shown but can still be used by the SETs
+	NUMMAT (variable, invisibleName, initialString)
+		'invisibleName' is not shown but can still be used by the SETs
+	RADIO (variable, label, initialValue, base)
+		this should be followed by two or more RADIOBUTTONs;
+		the initial value is between base and the number of radio buttons plus base-1.
+	RADIOBUTTON (label)
+	OPTIONMENU (variable, label, initialValue)
+		this should be followed by two or more OPTIONs;
+		the initial value is between 1 and the number of options.
+	OPTION (label)
+	LIST (variable, label, number, strings, initialValue)
 	OK
 		this statement is obligatory.
 	SET_XXXXXX (name, value)
 		sets the value of REAL..LIST.
 	DO
 	The order of the macros should be:
-		FORM
-		one or more from REAL..LIST
+		FORM {
+			one or more from REAL..LIST
 		OK
-		zero or more SETs
+			zero or more SETs
 		DO
-		...
-		END
+			...
+		}
 	See Ui.h for more information.
-	Between DO and END, you can throw an exception if anything is wrong;
+	Between DO and `}`, you can throw an exception if anything is wrong;
 	if everything is all right, you just trickle down to END.
 	Never do "return", because END will update the selection if an object is created.
  */
@@ -272,89 +271,51 @@ void praat_name2 (char32 *name, ClassInfo klas1, ClassInfo klas2);
 		if (dia) goto dia_inited; \
 		dia = UiForm_create (theCurrentPraatApplication -> topShell, name, proc, buttonClosure, invokingButtonTitle, helpTitle);
 
-#define REAL(label,def)  UiForm_addReal (dia, label, def);
-#define REAL4(variable,label,def)  static double variable; UiForm_addReal4 (dia, & variable, U"" #variable, label, def);
-#define REALVAR REAL4
-#define REAL_OR_UNDEFINED(label,def)  UiForm_addRealOrUndefined (dia, label, def);
-#define REAL_OR_UNDEFINED4(variable,label,def)  static double variable; UiForm_addRealOrUndefined4 (dia, & variable, U"" #variable, label, def);
-#define REAL_OR_UNDEFINEDVAR REAL_OR_UNDEFINEDVAR4
-#define POSITIVE(label,def)  UiForm_addPositive (dia, label, def);
-#define POSITIVE4(variable,label,def)  static double variable; UiForm_addPositive4 (dia, & variable, U"" #variable, label, def);
-#define POSITIVEVAR POSITIVE4
-#define INTEGER(label,def)  UiForm_addInteger (dia, label, def);
-#define INTEGER4(variable,label,def)  static long variable; UiForm_addInteger4 (dia, & variable, U"" #variable, label, def);
-#define INTEGERVAR INTEGER4
-#define NATURAL(label,def)  UiForm_addNatural (dia, label, def);
-#define NATURAL4(variable,label,def)  static long variable; UiForm_addNatural4 (dia, & variable, U"" #variable, label, def);
-#define NATURALVAR NATURAL4
-#define WORD(label,def)  UiForm_addWord (dia, label, def);
-#define WORD4(variable,label,def)  static char32 *variable; UiForm_addWord4 (dia, & variable, U"" #variable, label, def);
-#define WORDVAR WORD4
-#define SENTENCE(label,def)  UiForm_addSentence (dia, label, def);
-#define SENTENCE4(variable,label,def)  static char32 *variable; UiForm_addSentence4 (dia, & variable, U"" #variable, label, def);
-#define SENTENCEVAR SENTENCE4
-#define BOOLEAN(label,def)  UiForm_addBoolean (dia, label, def);
-#define BOOLEAN4(variable,label,def)  static bool variable; UiForm_addBoolean4 (dia, & variable, U"" #variable, label, def);
-#define BOOLEANVAR BOOLEAN4
+#define REAL(variable,label,def)  static double variable; UiForm_addReal4 (dia, & variable, U"" #variable, label, def);
+#define REAL_OR_UNDEFINED(variable,label,def)  static double variable; UiForm_addRealOrUndefined4 (dia, & variable, U"" #variable, label, def);
+#define POSITIVE(variable,label,def)  static double variable; UiForm_addPositive4 (dia, & variable, U"" #variable, label, def);
+#define INTEGER(variable,label,def)  static long variable; UiForm_addInteger4 (dia, & variable, U"" #variable, label, def);
+#define NATURAL(variable,label,def)  static long variable; UiForm_addNatural4 (dia, & variable, U"" #variable, label, def);
+#define WORD(variable,label,def)  static char32 *variable; UiForm_addWord4 (dia, & variable, U"" #variable, label, def);
+#define SENTENCE(variable,label,def)  static char32 *variable; UiForm_addSentence4 (dia, & variable, U"" #variable, label, def);
+#define BOOLEAN(variable,label,def)  static bool variable; UiForm_addBoolean4 (dia, & variable, U"" #variable, label, def);
 #define LABEL(name,label)  UiForm_addLabel (dia, name, label);
-#define TEXTFIELD(name,def)  UiForm_addText (dia, name, def);
-#define TEXTFIELD4(variable,name,def)  static char32 *variable; UiForm_addText4 (dia, & variable, U"" #variable, name, def);
-#define TEXTVAR TEXTFIELD4
-#define RADIO(label,def)  radio = UiForm_addRadio (dia, label, def);
-#define RADIO4(variable,label,def)  static int variable; radio = UiForm_addRadio4 (dia, & variable, nullptr, U"" #variable, label, def, 1);
-#define RADIOVAR RADIO4
-#define RADIO4x(variable,label,def,base)  static int variable; radio = UiForm_addRadio4 (dia, & variable, nullptr, U"" #variable, label, def, base);
-#define RADIOVARx RADIO4x
-#define RADIOSTR4(variable,label,def)  static char32 *variable; radio = UiForm_addRadio4 (dia, nullptr, & variable, U"" #variable, label, def, 1);
-#define RADIOSTRVAR RADIOSTR4
+#define TEXTFIELD(variable,name,def)  static char32 *variable; UiForm_addText4 (dia, & variable, U"" #variable, name, def);
+#define NUMVEC(variable,name,def)  static autonumvec variable; UiForm_addNumvec (dia, & variable, U"" #variable, name, def);
+#define NUMMAT(variable,name,def)  static autonummat variable; UiForm_addNummat (dia, & variable, U"" #variable, name, def);
+#define RADIO(variable,label,def)  static int variable; radio = UiForm_addRadio4 (dia, & variable, nullptr, U"" #variable, label, def, 1);
+#define RADIOx(variable,label,def,base)  static int variable; radio = UiForm_addRadio4 (dia, & variable, nullptr, U"" #variable, label, def, base);
+#define RADIOSTR(variable,label,def)  static char32 *variable; radio = UiForm_addRadio4 (dia, nullptr, & variable, U"" #variable, label, def, 1);
 #define RADIOBUTTON(label)  UiRadio_addButton (radio, label);
-#define OPTIONMENU(label,def)  radio = UiForm_addOptionMenu (dia, label, def);
-#define OPTIONMENU4(variable,label,def)  static int variable; radio = UiForm_addOptionMenu4 (dia, & variable, nullptr, U"" #variable, label, def, 1);
-#define OPTIONMENUVAR OPTIONMENU4
-#define OPTIONMENU4x(variable,label,def,base)  static int variable; radio = UiForm_addOptionMenu4 (dia, & variable, nullptr, U"" #variable, label, def, base);
-#define OPTIONMENUVARx OPTIONMENU4x
-#define OPTIONMENUSTR4(variable,label,def)  static char32 *variable; radio = UiForm_addOptionMenu4 (dia, nullptr, & variable, U"" #variable, label, def, 1);
-#define OPTIONMENUSTRVAR OPTIONMENUSTR4
+#define OPTIONMENU(variable,label,def)  static int variable; radio = UiForm_addOptionMenu4 (dia, & variable, nullptr, U"" #variable, label, def, 1);
+#define OPTIONMENUx(variable,label,def,base)  static int variable; radio = UiForm_addOptionMenu4 (dia, & variable, nullptr, U"" #variable, label, def, base);
+#define OPTIONMENUSTR(variable,label,def)  static char32 *variable; radio = UiForm_addOptionMenu4 (dia, nullptr, & variable, U"" #variable, label, def, 1);
 #define OPTION(label)	UiOptionMenu_addButton (radio, label);
-#define RADIO_ENUM(label,kType,def)  \
-	RADIO (label, (int) kType::def - (int) kType::MIN + 1) \
-	for (int ienum = (int) kType::MIN; ienum <= (int) kType::MAX; ienum ++) \
-		OPTION (kType##_getText ((kType) ienum))
-#define RADIO_ENUM4(variable,label,kType,def)  \
+#define RADIO_ENUM(variable,label,kType,def)  \
 	static kType variable; \
 	radio = UiForm_addRadio4 (dia, (int *) & variable, nullptr, U"" #variable, label, (int) kType::def - (int) kType::MIN + 1, (int) kType::MIN); \
 	for (int ienum = (int) kType::MIN; ienum <= (int) kType::MAX; ienum ++) \
 		OPTION (kType##_getText ((kType) ienum))
-#define OPTIONMENU_ENUM(label,kType,def)  \
-	OPTIONMENU (label, (int) kType::def - (int) kType::MIN + 1) \
-	for (int ienum = (int) kType::MIN; ienum <= (int) kType::MAX; ienum ++) \
-		OPTION (kType##_getText ((kType) ienum))
-#define OPTIONMENU_ENUM4(variable,label,kType,def)  \
-	OPTIONMENU4x (variable, label, (int) kType::def - (int) kType::MIN + 1, (int) kType::MIN) \
+#define OPTIONMENU_ENUM(variable,label,kType,def)  \
+	static kType variable; \
+	radio = UiForm_addOptionMenu4 (dia, (int *) & variable, nullptr, U"" #variable, label, (int) kType::def - (int) kType::MIN + 1, (int) kType::MIN); \
 	for (int ienum = (int) kType::MIN; ienum <= (int) kType::MAX; ienum ++) \
 		OPTION (kType##_getText ((kType) ienum))
-#define OPTIONMENU_ENUMVAR OPTIONMENU_ENUM4
-#define OPTIONMENU_ENUMSTR4(variable,label,kType,def)  \
-	OPTIONMENUSTRVAR (variable, label, (int) kType::def - (int) kType::MIN + 1) \
+#define OPTIONMENU_ENUMSTR(variable,label,kType,def)  \
+	OPTIONMENUSTR (variable, label, (int) kType::def - (int) kType::MIN + 1) \
 	for (int ienum = (int) kType::MIN; ienum <= (int) kType::MAX; ienum ++) \
 		OPTION (kType##_getText ((kType) ienum))
-#define OPTIONMENU_ENUMSTRVAR OPTIONMENU_ENUMSTR4
-#define LIST(label,n,str,def)  UiForm_addList (dia, label, n, str, def);
-#define LIST4(variable,label,n,str,def)  static long variable; UiForm_addList4 (dia, & variable, nullptr, U"" #variable, label, n, str, def);
-#define LISTVAR LIST4
-#define LISTSTR4(variable,label,n,str,def)  static char32 *variable; UiForm_addList4 (dia, nullptr, & variable, U"" #variable, label, n, str, def);
-#define LISTSTRVAR LISTSTR4
+#define LIST(variable,label,n,str,def)  static long variable; UiForm_addList4 (dia, & variable, nullptr, U"" #variable, label, n, str, def);
+#define LISTSTR(variable,label,n,str,def)  static char32 *variable; UiForm_addList4 (dia, nullptr, & variable, U"" #variable, label, n, str, def);
 #define FILE_IN(label)		UiForm_addFileIn (dia, label);
 #define FILE_OUT(label,def)	UiForm_addFileOut (dia, label, def);
 #define COLOUR(label,def)	UiForm_addColour (dia, label, def);
-#define CHANNEL(label,def)	UiForm_addChannel (dia, label, def);
-#define CHANNEL4(variable,label,def)   static long variable; UiForm_addChannel4 (dia, & variable, U"" #variable, label, def);
-#define CHANNELVAR CHANNEL4
+#define CHANNEL(variable,label,def)   static long variable; UiForm_addChannel4 (dia, & variable, U"" #variable, label, def);
 #define OK UiForm_finish (dia); dia_inited: if (narg < 0) UiForm_info (dia, narg); else if (! sendingForm && ! args && ! sendingString) {
 #define SET_REAL(name,value)	UiForm_setReal (dia, name, value);
 #define SET_INTEGER(name,value)	UiForm_setInteger (dia, name, value);
 #define SET_STRING(name,value)	UiForm_setString (dia, name, value);
-#define SET_ENUM(name,kType,value)  { kType typeCheckDummy = value; (void) typeCheckDummy; } SET_STRING (name, kType##_getText ((kType) value))
+#define SET_ENUM(name,kType,value)  { kType typeCheckDummy = value; (void) typeCheckDummy; } SET_STRING (name, kType##_getText (value))
 
 #define DO  \
 			UiForm_do (dia, modified); \
@@ -415,9 +376,9 @@ void praat_name2 (char32 *name, ClassInfo klas1, ClassInfo klas2);
 	}
 
 #define DIRECT(proc)  \
-	extern "C" void proc (UiForm dummy1, int narg, Stackel args, const char32 *dummy2, Interpreter dummy3, const char32 *dummy4, bool dummy5, void *dummy6); \
-	void proc (UiForm dummy1, int narg, Stackel args, const char32 *dummy2, Interpreter dummy3, const char32 *dummy4, bool dummy5, void *dummy6) { \
-		(void) dummy1; (void) narg; (void) args; (void) dummy2; (void) dummy3; (void) dummy4; (void) dummy5; (void) dummy6; \
+	extern "C" void proc (UiForm dummy1, int narg, Stackel args, const char32 *dummy2, Interpreter interpreter, const char32 *dummy4, bool dummy5, void *dummy6); \
+	void proc (UiForm dummy1, int narg, Stackel args, const char32 *dummy2, Interpreter interpreter, const char32 *dummy4, bool dummy5, void *dummy6) { \
+		(void) dummy1; (void) narg; (void) args; (void) dummy2; (void) interpreter; (void) dummy4; (void) dummy5; (void) dummy6; \
 		int IOBJECT = 0; \
 		(void) IOBJECT; \
 		{ { \
@@ -632,6 +593,12 @@ void praat_name2 (char32 *name, ClassInfo klas1, ClassInfo klas2);
 #define STRING_ONE(klas)  FIND_ONE (klas)
 #define STRING_ONE_END  Melder_information (result); END_NO_NEW_DATA
 
+#define NUMVEC_ONE(klas)  FIND_ONE (klas)
+#define NUMVEC_ONE_END  if (interpreter) theInterpreterNumvec = result.move(); else Melder_information (result.get()); END_NO_NEW_DATA
+
+#define NUMMAT_ONE(klas)  FIND_ONE (klas)
+#define NUMMAT_ONE_END  if (interpreter) theInterpreterNummat = result.move(); else Melder_information (result.get()); END_NO_NEW_DATA
+
 #define MODIFY_EACH(klas)  LOOP { iam_LOOP (klas);
 #define MODIFY_EACH_END  praat_dataChanged (me); } END_NO_NEW_DATA
 
diff --git a/sys/praatP.h b/sys/praatP.h
index bee060b..828d4a4 100644
--- a/sys/praatP.h
+++ b/sys/praatP.h
@@ -83,8 +83,8 @@ Thing_define (Praat_Command, Thing) {
 	const char32 *window, *menu;
 	const char32 *script;   // if 'callback' equals DO_RunTheScriptFromAnyAddedMenuCommand
 	const char32 *after;   // title of previous command, often null; if starting with an asterisk (deprecation), then a reference to the replacement
-	int32 uniqueID;   // for sorting the added commands
-	int32 sortingTail;
+	integer uniqueID;   // for sorting the added commands
+	integer sortingTail;
 };
 
 #define praat_STARTING_UP  1
diff --git a/sys/praat_actions.cpp b/sys/praat_actions.cpp
index 9f58e26..9b034e4 100644
--- a/sys/praat_actions.cpp
+++ b/sys/praat_actions.cpp
@@ -244,9 +244,11 @@ void praat_addActionScript (const char32 *className1, int n1, const char32 *clas
 		/*
 		 * If the button already exists, remove it.
 		 */
-		long found = lookUpMatchingAction (class1, class2, class3, nullptr, title);
-		if (found) {
-			theActions. removeItem (found);
+		{// scope
+			long found = lookUpMatchingAction (class1, class2, class3, nullptr, title);
+			if (found) {
+				theActions. removeItem (found);
+			}
 		}
 
 		/*
@@ -447,7 +449,7 @@ static int compareActions (const void *void_me, const void *void_thee) {
 }
 
 void praat_sortActions () {
-	for (long i = 1; i <= theActions.size; i ++) {
+	for (integer i = 1; i <= theActions.size; i ++) {
 		Praat_Command action = theActions.at [i];
 		action -> sortingTail = i;
 	}
diff --git a/sys/praat_objectMenus.cpp b/sys/praat_objectMenus.cpp
index 2299105..0601973 100644
--- a/sys/praat_objectMenus.cpp
+++ b/sys/praat_objectMenus.cpp
@@ -41,7 +41,7 @@ END }
 
 FORM (MODIFY_Rename, U"Rename object", U"Rename...") {
 	LABEL (U"rename object", U"New name:")
-	TEXTFIELD4 (newName, U"newName", U"")
+	TEXTFIELD (newName, U"newName", U"")
 OK
 	WHERE (SELECTED) SET_STRING (U"newName", NAME)
 DO
@@ -68,7 +68,7 @@ END }
 
 FORM (NEW1_Copy, U"Copy object", U"Copy...") {
 	LABEL (U"copy object", U"Name of new object:")
-	TEXTFIELD4 (newName, U"newName", U"")
+	TEXTFIELD (newName, U"newName", U"")
 OK
 	WHERE (SELECTED) SET_STRING (U"newName", NAME)
 DO
@@ -163,68 +163,68 @@ DIRECT (WINDOW_praat_editButtons) {
 END }
 
 FORM (PRAAT_addMenuCommand, U"Add menu command", U"Add menu command...") {
-	WORD4 (window, U"Window", U"Objects")
-	WORD4 (menu, U"Menu", U"New")
-	SENTENCE4 (command, U"Command", U"Hallo...")
-	SENTENCE4 (afterCommand, U"After command", U"")
-	INTEGER4 (depth, U"Depth", U"0")
+	WORD (window, U"Window", U"Objects")
+	WORD (menu, U"Menu", U"New")
+	SENTENCE (command, U"Command", U"Hallo...")
+	SENTENCE (afterCommand, U"After command", U"")
+	INTEGER (depth, U"Depth", U"0")
 	LABEL (U"", U"Script file:")
-	TEXTFIELD4 (script, U"script", U"/u/miep/hallo.praat")
+	TEXTFIELD (script, U"script", U"/u/miep/hallo.praat")
 	OK
 DO
 	praat_addMenuCommandScript (window, menu, command, afterCommand, depth, script);
 END }
 
 FORM (PRAAT_hideMenuCommand, U"Hide menu command", U"Hide menu command...") {
-	WORD4 (window, U"Window", U"Objects")
-	WORD4 (menu, U"Menu", U"New")
-	SENTENCE4 (command, U"Command", U"Hallo...")
+	WORD (window, U"Window", U"Objects")
+	WORD (menu, U"Menu", U"New")
+	SENTENCE (command, U"Command", U"Hallo...")
 	OK
 DO
 	praat_hideMenuCommand (window, menu, command);
 END }
 
 FORM (PRAAT_showMenuCommand, U"Show menu command", U"Show menu command...") {
-	WORD4 (window, U"Window", U"Objects")
-	WORD4 (menu, U"Menu", U"New")
-	SENTENCE4 (command, U"Command", U"Hallo...")
+	WORD (window, U"Window", U"Objects")
+	WORD (menu, U"Menu", U"New")
+	SENTENCE (command, U"Command", U"Hallo...")
 	OK
 DO
 	praat_showMenuCommand (window, menu, command);
 END }
 
 FORM (PRAAT_addAction, U"Add action command", U"Add action command...") {
-	WORD4 (class1, U"Class 1", U"Sound")
-	INTEGER4 (number1, U"Number 1", U"0")
-	WORD4 (class2, U"Class 2", U"")
-	INTEGER4 (number2, U"Number 2", U"0")
-	WORD4 (class3, U"Class 3", U"")
-	INTEGER4 (number3, U"Number 3", U"0")
-	SENTENCE4 (command, U"Command", U"Play reverse")
-	SENTENCE4 (afterCommand, U"After command", U"Play")
-	INTEGER4 (depth, U"Depth", U"0")
+	WORD (class1, U"Class 1", U"Sound")
+	INTEGER (number1, U"Number 1", U"0")
+	WORD (class2, U"Class 2", U"")
+	INTEGER (number2, U"Number 2", U"0")
+	WORD (class3, U"Class 3", U"")
+	INTEGER (number3, U"Number 3", U"0")
+	SENTENCE (command, U"Command", U"Play reverse")
+	SENTENCE (afterCommand, U"After command", U"Play")
+	INTEGER (depth, U"Depth", U"0")
 	LABEL (U"", U"Script file:")
-	TEXTFIELD4 (script, U"script", U"/u/miep/playReverse.praat")
+	TEXTFIELD (script, U"script", U"/u/miep/playReverse.praat")
 	OK
 DO
 	praat_addActionScript (class1, number1, class2, number2, class3, number3, command, afterCommand, depth, script);
 END }
 
 FORM (PRAAT_hideAction, U"Hide action command", U"Hide action command...") {
-	WORD4 (class1, U"Class 1", U"Sound")
-	WORD4 (class2, U"Class 2", U"")
-	WORD4 (class3, U"Class 3", U"")
-	SENTENCE4 (command, U"Command", U"Play")
+	WORD (class1, U"Class 1", U"Sound")
+	WORD (class2, U"Class 2", U"")
+	WORD (class3, U"Class 3", U"")
+	SENTENCE (command, U"Command", U"Play")
 	OK
 DO
 	praat_hideAction_classNames (class1, class2, class3, command);
 END }
 
 FORM (PRAAT_showAction, U"Show action command", U"Show action command...") {
-	WORD4 (class1, U"Class 1", U"Sound")
-	WORD4 (class2, U"Class 2", U"")
-	WORD4 (class3, U"Class 3", U"")
-	SENTENCE4 (command, U"Command", U"Play")
+	WORD (class1, U"Class 1", U"Sound")
+	WORD (class2, U"Class 2", U"")
+	WORD (class3, U"Class 3", U"")
+	SENTENCE (command, U"Command", U"Play")
 	OK
 DO
 	praat_showAction_classNames (class1, class2, class3, command);
@@ -233,7 +233,7 @@ END }
 /********** Callbacks of the Preferences menu. **********/
 
 FORM (PREFS_TextInputEncodingSettings, U"Text reading preferences", U"Unicode") {
-	RADIO_ENUM4 (encodingOf8BitTextFiles, U"Encoding of 8-bit text files", kMelder_textInputEncoding, DEFAULT)
+	RADIO_ENUM (encodingOf8BitTextFiles, U"Encoding of 8-bit text files", kMelder_textInputEncoding, DEFAULT)
 OK
 	SET_ENUM (U"Encoding of 8-bit text files", kMelder_textInputEncoding, Melder_getInputEncoding ())
 DO
@@ -241,7 +241,7 @@ DO
 END }
 
 FORM (PREFS_TextOutputEncodingSettings, U"Text writing preferences", U"Unicode") {
-	RADIO_ENUM4 (outputEncoding, U"Output encoding", kMelder_textOutputEncoding, DEFAULT)
+	RADIO_ENUM (outputEncoding, U"Output encoding", kMelder_textOutputEncoding, DEFAULT)
 OK
 	SET_ENUM (U"Output encoding", kMelder_textOutputEncoding, Melder_getOutputEncoding ())
 DO
@@ -249,7 +249,7 @@ DO
 END }
 
 FORM (PREFS_GraphicsCjkFontStyleSettings, U"CJK font style preferences", nullptr) {
-	OPTIONMENU_ENUM4 (cjkFontStyle, U"CJK font style", kGraphics_cjkFontStyle, DEFAULT)
+	OPTIONMENU_ENUM (cjkFontStyle, U"CJK font style", kGraphics_cjkFontStyle, DEFAULT)
 OK
 	SET_ENUM (U"CJK font style", kGraphics_cjkFontStyle, theGraphicsCjkFontStyle)
 DO
@@ -260,7 +260,7 @@ END }
 
 FORM (STRING_praat_calculator, U"Calculator", U"Calculator") {
 	LABEL (U"", U"Type any numeric formula or string formula:")
-	TEXTFIELD4 (expression, U"expression", U"5*5")
+	TEXTFIELD (expression, U"expression", U"5*5")
 	LABEL (U"", U"Note that you can include many special functions in your formula,")
 	LABEL (U"", U"including statistical functions and acoustics-auditory conversions.")
 	LABEL (U"", U"For details, click Help.")
@@ -293,10 +293,10 @@ DO
 END }
 
 FORM (INFO_reportDifferenceOfTwoProportions, U"Report difference of two proportions", U"Difference of two proportions") {
-	INTEGER4 (a, U"left Row 1", U"71")
-	INTEGER4 (b, U"right Row 1", U"39")
-	INTEGER4 (c, U"left Row 2", U"93")
-	INTEGER4 (d, U"right Row 2", U"27")
+	INTEGER (a, U"left Row 1", U"71")
+	INTEGER (b, U"right Row 1", U"39")
+	INTEGER (c, U"left Row 2", U"93")
+	INTEGER (d, U"right Row 2", U"27")
 	OK
 DO
 	double n = a + b + c + d;
@@ -353,11 +353,11 @@ FORM (PRAAT_debug, U"Set debugging options", nullptr) {
 		MelderDir_getFile (& dir, U"Tracing.txt", & file);
 	#endif
 	LABEL (U"", Melder_cat (U"to ", Melder_fileToPath (& file), U"."))
-	BOOLEAN4 (tracing, U"Tracing", false)
+	BOOLEAN (tracing, U"Tracing", false)
 	LABEL (U"", U"Setting the following to anything other than zero")
 	LABEL (U"", U"will alter the behaviour of Praat")
 	LABEL (U"", U"in unpredictable ways.")
-	INTEGER4 (debugOption, U"Debug option", U"0")
+	INTEGER (debugOption, U"Debug option", U"0")
 OK
 	SET_INTEGER (U"Tracing", Melder_isTracing)
 	SET_INTEGER (U"Debug option", Melder_debug)
@@ -371,19 +371,19 @@ DIRECT (INFO_listReadableTypesOfObjects) {
 END }
 
 FORM (INFO_praat_library_createC, U"PraatLib: Create C header or file", nullptr) {
-	BOOLEAN4 (isInHeader, U"Is in header", true)
-	BOOLEAN4 (includeCreateAPI, U"Include \"Create\" API", true)
-	BOOLEAN4 (includeReadAPI, U"Include \"Read\" API", true)
-	BOOLEAN4 (includeSaveAPI, U"Include \"Save\" API", true)
-	BOOLEAN4 (includeQueryAPI, U"Include \"Query\" API", true)
-	BOOLEAN4 (includeModifyAPI, U"Include \"Modify\" API", true)
-	BOOLEAN4 (includeToAPI, U"Include \"To\" API", true)
-	BOOLEAN4 (includeRecordAPI, U"Include \"Record\" API", true)
-	BOOLEAN4 (includePlayAPI, U"Include \"Play\" API", true)
-	BOOLEAN4 (includeDrawAPI, U"Include \"Draw\" API", true)
-	BOOLEAN4 (includeHelpAPI, U"Include \"Help\" API", false)
-	BOOLEAN4 (includeWindowAPI, U"Include \"Window\" API", false)
-	BOOLEAN4 (includeDemoAPI, U"Include \"Demo\" API", false)
+	BOOLEAN (isInHeader, U"Is in header", true)
+	BOOLEAN (includeCreateAPI, U"Include \"Create\" API", true)
+	BOOLEAN (includeReadAPI, U"Include \"Read\" API", true)
+	BOOLEAN (includeSaveAPI, U"Include \"Save\" API", true)
+	BOOLEAN (includeQueryAPI, U"Include \"Query\" API", true)
+	BOOLEAN (includeModifyAPI, U"Include \"Modify\" API", true)
+	BOOLEAN (includeToAPI, U"Include \"To\" API", true)
+	BOOLEAN (includeRecordAPI, U"Include \"Record\" API", true)
+	BOOLEAN (includePlayAPI, U"Include \"Play\" API", true)
+	BOOLEAN (includeDrawAPI, U"Include \"Draw\" API", true)
+	BOOLEAN (includeHelpAPI, U"Include \"Help\" API", false)
+	BOOLEAN (includeWindowAPI, U"Include \"Window\" API", false)
+	BOOLEAN (includeDemoAPI, U"Include \"Demo\" API", false)
 	OK
 DO
 	praat_library_createC (isInHeader, includeCreateAPI, includeReadAPI, includeSaveAPI,
@@ -483,7 +483,7 @@ END }
 
 FORM (PRAAT_ManPages_saveToHtmlDirectory, U"Save all pages as HTML files", nullptr) {
 	LABEL (U"", U"Type a directory name:")
-	TEXTFIELD4 (directory, U"directory", U"")
+	TEXTFIELD (directory, U"directory", U"")
 OK
 	structMelderDir currentDirectory { };
 	Melder_getDefaultDir (& currentDirectory);
@@ -512,7 +512,7 @@ END }
 
 FORM (HELP_SearchManual, U"Search manual", U"Manual") {
 	LABEL (U"", U"Search for strings (separate with spaces):")
-	TEXTFIELD4 (query, U"query", U"")
+	TEXTFIELD (query, U"query", U"")
 	OK
 DO
 	if (theCurrentPraatApplication -> batch)
@@ -525,19 +525,19 @@ END }
 FORM (HELP_GoToManualPage, U"Go to manual page", nullptr) {
 	static long numberOfPages;
 	static const char32 **pages = ManPages_getTitles (theCurrentPraatApplication -> manPages, & numberOfPages);
-	LIST (U"Page", numberOfPages, pages, 1)
+	LIST (pageNumber, U"Page", numberOfPages, pages, 1)
 	OK
 DO
 	if (theCurrentPraatApplication -> batch)
 		Melder_throw (U"Cannot view a manual from batch.");
 	autoManual manual = Manual_create (U"Intro", theCurrentPraatApplication -> manPages, false);
-	HyperPage_goToPage_i (manual.get(), GET_INTEGER (U"Page"));
+	HyperPage_goToPage_i (manual.get(), pageNumber);
 	manual.releaseToUser();
 END }
 
 FORM (HELP_WriteManualToHtmlDirectory, U"Save all pages as HTML files", nullptr) {
 	LABEL (U"", U"Type a directory name:")
-	TEXTFIELD4 (directory, U"directory", U"")
+	TEXTFIELD (directory, U"directory", U"")
 OK
 	structMelderDir currentDirectory { };
 	Melder_getDefaultDir (& currentDirectory);
@@ -578,7 +578,7 @@ static void searchProc () {
 
 static MelderString itemTitle_about { };
 
-static autoDaata scriptRecognizer (int nread, const char *header, MelderFile file) {
+static autoDaata scriptRecognizer (integer nread, const char *header, MelderFile file) {
 	const char32 *name = MelderFile_name (file);
 	if (nread < 2) return autoDaata ();
 	if ((header [0] == '#' && header [1] == '!') || str32str (name, U".praat") == name + str32len (name) - 6
diff --git a/sys/praat_picture.cpp b/sys/praat_picture.cpp
index 67cdfcc..d0a01b6 100644
--- a/sys/praat_picture.cpp
+++ b/sys/praat_picture.cpp
@@ -21,6 +21,7 @@
 #include "Printer.h"
 #include "machine.h"
 #include "Formula.h"
+#include "site.h"
 
 #include "GuiP.h"
 
@@ -96,7 +97,7 @@ DIRECT (GRAPHICS_14) { setFontSize (14); END }
 DIRECT (GRAPHICS_18) { setFontSize (18); END }
 DIRECT (GRAPHICS_24) { setFontSize (24); END }
 FORM (GRAPHICS_Font_size, U"Praat picture: Font size", U"Font menu") {
-	NATURAL4 (fontSize, U"Font size (points)", U"10")
+	NATURAL (fontSize, U"Font size (points)", U"10")
 OK
 	SET_INTEGER (U"Font size", (long) theCurrentPraatPicture -> fontSize);
 DO
@@ -161,10 +162,10 @@ FORM (GRAPHICS_SelectInnerViewport, U"Praat picture: Select inner viewport", U"S
 	LABEL (U"", U"It is where your next drawing will appear.")
 	LABEL (U"", U"The rectangle you select here will not include the margins.")
 	LABEL (U"", U"")
-	REAL4 (left, U"left Horizontal range (inches)", U"0.0")
-	REAL4 (right, U"right Horizontal range (inches)", U"6.0")
-	REAL4 (top, U"left Vertical range (inches)", U"0.0")
-	REAL4 (bottom, U"right Vertical range (inches)", U"6.0")
+	REAL (left, U"left Horizontal range (inches)", U"0.0")
+	REAL (right, U"right Horizontal range (inches)", U"6.0")
+	REAL (top, U"left Vertical range (inches)", U"0.0")
+	REAL (bottom, U"right Vertical range (inches)", U"6.0")
 OK
 	double xmargin = theCurrentPraatPicture -> fontSize * 4.2 / 72.0, ymargin = theCurrentPraatPicture -> fontSize * 2.8 / 72.0;
 	if (ymargin > 0.4 * (theCurrentPraatPicture -> y2NDC - theCurrentPraatPicture -> y1NDC))
@@ -232,10 +233,10 @@ FORM (GRAPHICS_SelectOuterViewport, U"Praat picture: Select outer viewport", U"S
 	LABEL (U"", U"It is where your next drawing will appear.")
 	LABEL (U"", U"The rectangle you select here will include the margins.")
 	LABEL (U"", U"")
-	REAL4 (left, U"left Horizontal range (inches)", U"0.0")
-	REAL4 (right, U"right Horizontal range (inches)", U"6.0")
-	REAL4 (top, U"left Vertical range (inches)", U"0.0")
-	REAL4 (bottom, U"right Vertical range (inches)", U"6.0")
+	REAL (left, U"left Horizontal range (inches)", U"0.0")
+	REAL (right, U"right Horizontal range (inches)", U"6.0")
+	REAL (top, U"left Vertical range (inches)", U"0.0")
+	REAL (bottom, U"right Vertical range (inches)", U"6.0")
 OK
 	SET_REAL (U"left Horizontal range", theCurrentPraatPicture -> x1NDC);
 	SET_REAL (U"right Horizontal range", theCurrentPraatPicture -> x2NDC);
@@ -273,16 +274,16 @@ DO
 END }
 
 FORM (GRAPHICS_ViewportText, U"Praat picture: Viewport text", U"Viewport text...") {
-	RADIO4x (horizontalAlignment, U"Horizontal alignment", 2, 0)
+	RADIOx (horizontalAlignment, U"Horizontal alignment", 2, 0)
 		RADIOBUTTON (U"Left")
 		RADIOBUTTON (U"Centre")
 		RADIOBUTTON (U"Right")
-	RADIO4x (verticalAlignment, U"Vertical alignment", 2, 0)
+	RADIOx (verticalAlignment, U"Vertical alignment", 2, 0)
 		RADIOBUTTON (U"Bottom")
 		RADIOBUTTON (U"Half")
 		RADIOBUTTON (U"Top")
-	REAL4 (rotation, U"Rotation (degrees)", U"0")
-	TEXTFIELD4 (text, U"text", U"")
+	REAL (rotation, U"Rotation (degrees)", U"0")
+	TEXTFIELD (text, U"text", U"")
 OK
 DO
 	double x1WC, x2WC, y1WC, y2WC;
@@ -345,7 +346,7 @@ DIRECT (GRAPHICS_Dashed_line)        { setLineType (Graphics_DASHED);        END
 DIRECT (GRAPHICS_Dashed_dotted_line) { setLineType (Graphics_DASHED_DOTTED); END }
 
 FORM (GRAPHICS_Line_width, U"Praat picture: Line width", nullptr) {
-	POSITIVE4 (lineWidth, U"Line width", U"1.0")
+	POSITIVE (lineWidth, U"Line width", U"1.0")
 OK
 	SET_REAL (U"Line width", theCurrentPraatPicture -> lineWidth);
 DO
@@ -357,7 +358,7 @@ DO
 END }
 
 FORM (GRAPHICS_Arrow_size, U"Praat picture: Arrow size", nullptr) {
-	POSITIVE4 (arrowSize, U"Arrow size", U"1.0")
+	POSITIVE (arrowSize, U"Arrow size", U"1.0")
 OK
 	SET_REAL (U"Arrow size", theCurrentPraatPicture -> arrowSize);
 DO
@@ -371,7 +372,7 @@ END }
 FORM (GRAPHICS_Speckle_size, U"Praat picture: Speckle size", nullptr) {
 	LABEL (U"", U"Here you determine the diameter (in millimetres)")
 	LABEL (U"", U"of the dots that are drawn by \"speckle\" commands.")
-	POSITIVE4 (speckleSize, U"Speckle size (mm)", U"1.0")
+	POSITIVE (speckleSize, U"Speckle size (mm)", U"1.0")
 OK
 	SET_REAL (U"Speckle size", theCurrentPraatPicture -> speckleSize);
 DO
@@ -573,9 +574,60 @@ DIRECT (GRAPHICS_Page_setup) {
 END }
 #endif
 
-DIRECT (GRAPHICS_PostScript_settings) {
-	Printer_postScriptSettings ();
-END }
+FORM (GRAPHICS_PostScript_settings, U"PostScript settings", U"PostScript settings...") {
+	#if defined (_WIN32)
+		BOOLEAN (allowDirectPostscript, U"Allow direct PostScript", true);
+	#endif
+	RADIO_ENUM (greyResolution, U"Grey resolution", kGraphicsPostscript_spots, DEFAULT)
+	#if defined (UNIX)
+		RADIO_ENUM (paperSize, U"Paper size", kGraphicsPostscript_paperSize, DEFAULT);
+		RADIO_ENUM (orientation, U"Orientation", kGraphicsPostscript_orientation, DEFAULT);
+		POSITIVE (magnification, U"Magnification", U"1.0");
+		LABEL (U"label", U"Print command:");
+		#if defined (linux)
+			TEXTFIELD (printCommand, U"printCommand", U"lpr %s");
+		#else
+			TEXTFIELD (printCommand, U"printCommand", U"lp -c %s");
+		#endif
+	#endif
+	RADIO_ENUM (fontChoiceStrategy, U"Font choice strategy", kGraphicsPostscript_fontChoiceStrategy, DEFAULT)
+OK
+	#if defined (_WIN32)
+		SET_INTEGER (U"Allow direct PostScript", thePrinter. allowDirectPostScript);
+	#endif
+	SET_ENUM (U"Grey resolution", kGraphicsPostscript_spots, thePrinter. spots);
+	#if defined (UNIX)
+		SET_ENUM (U"Paper size", kGraphicsPostscript_paperSize, thePrinter. paperSize);
+		SET_ENUM (U"Orientation", kGraphicsPostscript_orientation, thePrinter. orientation);
+		SET_REAL (U"Magnification", thePrinter. magnification);
+		SET_STRING (U"printCommand", Site_getPrintCommand ());
+	#endif
+	SET_ENUM (U"Font choice strategy", kGraphicsPostscript_fontChoiceStrategy, thePrinter. fontChoiceStrategy);
+DO
+	INFO_NONE
+		#if defined (_WIN32)
+			thePrinter. allowDirectPostScript = allowDirectPostscript;
+		#endif
+		thePrinter. spots = greyResolution;
+		#if defined (UNIX)
+			thePrinter. paperSize = paperSize;
+			if (thePrinter. paperSize == kGraphicsPostscript_paperSize::A3) {
+				thePrinter. paperWidth = 842 * thePrinter. resolution / 72;
+				thePrinter. paperHeight = 1191 * thePrinter. resolution / 72;
+			} else if (thePrinter. paperSize == kGraphicsPostscript_paperSize::US_LETTER) {
+				thePrinter. paperWidth = 612 * thePrinter. resolution / 72;
+				thePrinter. paperHeight = 792 * thePrinter. resolution / 72;
+			} else {
+				thePrinter. paperWidth = 595 * thePrinter. resolution / 72;
+				thePrinter. paperHeight = 842 * thePrinter. resolution / 72;
+			}
+			thePrinter. orientation = orientation;
+			thePrinter. magnification = magnification;
+			Site_setPrintCommand (printCommand);
+		#endif
+		thePrinter. fontChoiceStrategy = fontChoiceStrategy;
+	INFO_NONE_END
+}
 
 DIRECT (GRAPHICS_Print) {
 	Picture_print (praat_picture.get());
@@ -638,18 +690,18 @@ END }
 /***** "World" MENU *****/
 
 FORM (GRAPHICS_Text, U"Praat picture: Text", U"Text...") {
-	REAL4 (horizontalPosition, U"Horizontal position", U"0.0")
-	OPTIONMENU4x (horizontalAlignment, U"Horizontal alignment", 2, 0)
+	REAL (horizontalPosition, U"Horizontal position", U"0.0")
+	OPTIONMENUx (horizontalAlignment, U"Horizontal alignment", 2, 0)
 		OPTION (U"Left")
 		OPTION (U"Centre")
 		OPTION (U"Right")
-	REAL4 (verticalPosition, U"Vertical position", U"0.0")
-	OPTIONMENU4x (verticalAlignment, U"Vertical alignment", 2, 0)
+	REAL (verticalPosition, U"Vertical position", U"0.0")
+	OPTIONMENUx (verticalAlignment, U"Vertical alignment", 2, 0)
 		OPTION (U"Bottom")
 		OPTION (U"Half")
 		OPTION (U"Top")
 	LABEL (U"", U"Text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	GRAPHICS_NONE
@@ -661,21 +713,21 @@ DO
 }
 
 FORM (GRAPHICS_TextSpecial, U"Praat picture: Text special", nullptr) {
-	REAL4 (horizontalPosition, U"Horizontal position", U"0.0")
-	OPTIONMENU4x (horizontalAlignment, U"Horizontal alignment", 2, 0)
+	REAL (horizontalPosition, U"Horizontal position", U"0.0")
+	OPTIONMENUx (horizontalAlignment, U"Horizontal alignment", 2, 0)
 		OPTION (U"Left")
 		OPTION (U"Centre")
 		OPTION (U"Right")
-	REAL4 (verticalPosition, U"Vertical position", U"0.0")
-	OPTIONMENU4x (verticalAlignment, U"Vertical alignment", 2, 0)
+	REAL (verticalPosition, U"Vertical position", U"0.0")
+	OPTIONMENUx (verticalAlignment, U"Vertical alignment", 2, 0)
 		OPTION (U"Bottom")
 		OPTION (U"Half")
 		OPTION (U"Top")
-	OPTIONMENU_ENUM4 (font, U"Font", kGraphics_font, DEFAULT)
-	NATURAL4 (fontSize, U"Font size", U"10")
-	SENTENCE4 (rotation, U"Rotation (degrees or dx;dy)", U"0")
+	OPTIONMENU_ENUM (font, U"Font", kGraphics_font, DEFAULT)
+	NATURAL (fontSize, U"Font size", U"10")
+	SENTENCE (rotation, U"Rotation (degrees or dx;dy)", U"0")
 	LABEL (U"", U"Text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 OK
 DO
 	kGraphics_font currentFont = Graphics_inqFont (GRAPHICS);
@@ -699,10 +751,10 @@ DO
 }
 
 FORM (GRAPHICS_DrawLine, U"Praat picture: Draw line", nullptr) {
-	REAL4 (fromX, U"From x", U"0.0")
-	REAL4 (fromY, U"From y", U"0.0")
-	REAL4 (toX, U"To x", U"1.0")
-	REAL4 (toY, U"To y", U"1.0")
+	REAL (fromX, U"From x", U"0.0")
+	REAL (fromY, U"From y", U"0.0")
+	REAL (toX, U"To x", U"1.0")
+	REAL (toY, U"To y", U"1.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -713,10 +765,10 @@ DO
 }
 
 FORM (GRAPHICS_DrawArrow, U"Praat picture: Draw arrow", nullptr) {
-	REAL4 (fromX, U"From x", U"0.0")
-	REAL4 (fromY, U"From y", U"0.0")
-	REAL4 (toX, U"To x", U"1.0")
-	REAL4 (toY, U"To y", U"1.0")
+	REAL (fromX, U"From x", U"0.0")
+	REAL (fromY, U"From y", U"0.0")
+	REAL (toX, U"To x", U"1.0")
+	REAL (toY, U"To y", U"1.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -727,10 +779,10 @@ DO
 }
 
 FORM (GRAPHICS_DrawDoubleArrow, U"Praat picture: Draw double arrow", nullptr) {
-	REAL4 (fromX, U"From x", U"0.0")
-	REAL4 (fromY, U"From y", U"0.0")
-	REAL4 (toX, U"To x", U"1.0")
-	REAL4 (toY, U"To y", U"1.0")
+	REAL (fromX, U"From x", U"0.0")
+	REAL (fromY, U"From y", U"0.0")
+	REAL (toX, U"To x", U"1.0")
+	REAL (toY, U"To y", U"1.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -757,11 +809,11 @@ Thing_implement (PraatPictureFunction, Daata, 0);
 FORM (GRAPHICS_DrawFunction, U"Praat picture: Draw function", nullptr) {
 	LABEL (U"", U"This command assumes that the x and y axes")
 	LABEL (U"", U"have been set by a Draw command or by \"Axes...\".")
-	REAL4 (fromX, U"From x", U"0.0")
-	REAL4 (toX, U"To x", U"0.0 (= all)")
-	NATURAL4 (numberOfHorizontalSteps, U"Number of horizontal steps", U"1000")
+	REAL (fromX, U"From x", U"0.0")
+	REAL (toX, U"To x", U"0.0 (= all)")
+	NATURAL (numberOfHorizontalSteps, U"Number of horizontal steps", U"1000")
 	LABEL (U"", U"Formula:")
-	TEXTFIELD4 (formula, U"formula", U"x^2 - x^4")
+	TEXTFIELD (formula, U"formula", U"x^2 - x^4")
 	OK
 DO
 	double x1WC, x2WC, y1WC, y2WC;
@@ -789,10 +841,10 @@ DO
 }
 
 FORM (GRAPHICS_DrawRectangle, U"Praat picture: Draw rectangle", nullptr) {
-	REAL4 (fromX, U"From x", U"0.0")
-	REAL4 (toX, U"To x", U"1.0")
-	REAL4 (fromY, U"From y", U"0.0")
-	REAL4 (toY, U"To y", U"1.0")
+	REAL (fromX, U"From x", U"0.0")
+	REAL (toX, U"To x", U"1.0")
+	REAL (fromY, U"From y", U"0.0")
+	REAL (toY, U"To y", U"1.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -804,10 +856,10 @@ DO
 
 FORM (GRAPHICS_PaintRectangle, U"Praat picture: Paint rectangle", nullptr) {
 	COLOUR (U"Colour (0-1, name, or {r,g,b})", U"0.5")
-	REAL4 (fromX, U"From x", U"0.0")
-	REAL4 (toX, U"To x", U"1.0")
-	REAL4 (fromY, U"From y", U"0.0")
-	REAL4 (toY, U"To y", U"1.0")
+	REAL (fromX, U"From x", U"0.0")
+	REAL (toX, U"To x", U"1.0")
+	REAL (fromY, U"From y", U"0.0")
+	REAL (toY, U"To y", U"1.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -819,11 +871,11 @@ DO
 }
 
 FORM (GRAPHICS_DrawRoundedRectangle, U"Praat picture: Draw rounded rectangle", nullptr) {
-	REAL4 (fromX, U"From x", U"0.0")
-	REAL4 (toX, U"To x", U"1.0")
-	REAL4 (fromY, U"From y", U"0.0")
-	REAL4 (toY, U"To y", U"1.0")
-	POSITIVE4 (radius, U"Radius (mm)", U"3.0")
+	REAL (fromX, U"From x", U"0.0")
+	REAL (toX, U"To x", U"1.0")
+	REAL (fromY, U"From y", U"0.0")
+	REAL (toY, U"To y", U"1.0")
+	POSITIVE (radius, U"Radius (mm)", U"3.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -835,11 +887,11 @@ DO
 
 FORM (GRAPHICS_PaintRoundedRectangle, U"Praat picture: Paint rounded rectangle", nullptr) {
 	COLOUR (U"Colour (0-1, name, or {r,g,b})", U"0.5")
-	REAL4 (fromX, U"From x", U"0.0")
-	REAL4 (toX, U"To x", U"1.0")
-	REAL4 (fromY, U"From y", U"0.0")
-	REAL4 (toY, U"To y", U"1.0")
-	POSITIVE4 (radius, U"Radius (mm)", U"3.0")
+	REAL (fromX, U"From x", U"0.0")
+	REAL (toX, U"To x", U"1.0")
+	REAL (fromY, U"From y", U"0.0")
+	REAL (toY, U"To y", U"1.0")
+	POSITIVE (radius, U"Radius (mm)", U"3.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -851,11 +903,11 @@ DO
 }
 
 FORM (GRAPHICS_DrawArc, U"Praat picture: Draw arc", nullptr) {
-	REAL4 (centreX, U"Centre x", U"0.0")
-	REAL4 (centreY, U"Centre y", U"0.0")
-	POSITIVE4 (radius, U"Radius (along x)", U"1.0")
-	REAL4 (fromAngle, U"From angle (degrees)", U"0.0")
-	REAL4 (toAngle, U"To angle (degrees)", U"90.0")
+	REAL (centreX, U"Centre x", U"0.0")
+	REAL (centreY, U"Centre y", U"0.0")
+	POSITIVE (radius, U"Radius (along x)", U"1.0")
+	REAL (fromAngle, U"From angle (degrees)", U"0.0")
+	REAL (toAngle, U"To angle (degrees)", U"90.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -866,10 +918,10 @@ DO
 }
 
 FORM (GRAPHICS_DrawEllipse, U"Praat picture: Draw ellipse", nullptr) {
-	REAL4 (fromX, U"From x", U"0.0")
-	REAL4 (toX, U"To x", U"1.0")
-	REAL4 (fromY, U"From y", U"0.0")
-	REAL4 (toY, U"To y", U"1.0")
+	REAL (fromX, U"From x", U"0.0")
+	REAL (toX, U"To x", U"1.0")
+	REAL (fromY, U"From y", U"0.0")
+	REAL (toY, U"To y", U"1.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -881,10 +933,10 @@ DO
 
 FORM (GRAPHICS_PaintEllipse, U"Praat picture: Paint ellipse", nullptr) {
 	COLOUR (U"Colour (0-1, name, or {r,g,b})", U"0.5")
-	REAL4 (fromX, U"From x", U"0.0")
-	REAL4 (toX, U"To x", U"1.0")
-	REAL4 (fromY, U"From y", U"0.0")
-	REAL4 (toY, U"To y", U"1.0")
+	REAL (fromX, U"From x", U"0.0")
+	REAL (toX, U"To x", U"1.0")
+	REAL (fromY, U"From y", U"0.0")
+	REAL (toY, U"To y", U"1.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -896,9 +948,9 @@ DO
 }
 
 FORM (GRAPHICS_DrawCircle, U"Praat picture: Draw circle", nullptr) {
-	REAL4 (centreX, U"Centre x", U"0.0")
-	REAL4 (centreY, U"Centre y", U"0.0")
-	POSITIVE4 (radius, U"Radius (along x)", U"1.0")
+	REAL (centreX, U"Centre x", U"0.0")
+	REAL (centreY, U"Centre y", U"0.0")
+	POSITIVE (radius, U"Radius (along x)", U"1.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -910,9 +962,9 @@ DO
 
 FORM (GRAPHICS_PaintCircle, U"Praat picture: Paint circle", nullptr) {
 	COLOUR (U"Colour (0-1, name, or {r,g,b})", U"0.5")
-	REAL4 (centreX, U"Centre x", U"0.0")
-	REAL4 (centreY, U"Centre y", U"0.0")
-	POSITIVE4 (radius, U"Radius (along x)", U"1.0")
+	REAL (centreX, U"Centre x", U"0.0")
+	REAL (centreY, U"Centre y", U"0.0")
+	POSITIVE (radius, U"Radius (along x)", U"1.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -924,9 +976,9 @@ DO
 }
 
 FORM (GRAPHICS_DrawCircle_mm, U"Praat picture: Draw circle (mm)", nullptr) {
-	REAL4 (centreX, U"Centre x", U"0.0")
-	REAL4 (centreY, U"Centre y", U"0.0")
-	POSITIVE4 (diameter, U"Diameter (mm)", U"5.0")
+	REAL (centreX, U"Centre x", U"0.0")
+	REAL (centreY, U"Centre y", U"0.0")
+	POSITIVE (diameter, U"Diameter (mm)", U"5.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -938,9 +990,9 @@ DO
 
 FORM (GRAPHICS_PaintCircle_mm, U"Praat picture: Paint circle (mm)", nullptr) {
 	COLOUR (U"Colour (0-1, name, or {r,g,b})", U"0.5")
-	REAL4 (centreX, U"Centre x", U"0.0")
-	REAL4 (centreY, U"Centre y", U"0.0")
-	POSITIVE4 (diameter, U"Diameter (mm)", U"5.0")
+	REAL (centreX, U"Centre x", U"0.0")
+	REAL (centreY, U"Centre y", U"0.0")
+	POSITIVE (diameter, U"Diameter (mm)", U"5.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -953,11 +1005,11 @@ DO
 
 FORM (GRAPHICS_InsertPictureFromFile, U"Praat picture: Insert picture from file", U"Insert picture from file...") {
 	LABEL (U"", U"File name:")
-	TEXTFIELD4 (fileName, U"fileName", U"~/Desktop/paul.jpg")
-	REAL4 (fromX, U"From x", U"0.0")
-	REAL4 (toX, U"To x", U"1.0")
-	REAL4 (fromY, U"From y", U"0.0")
-	REAL4 (toY, U"To y", U"1.0")
+	TEXTFIELD (fileName, U"fileName", U"~/Desktop/paul.jpg")
+	REAL (fromX, U"From x", U"0.0")
+	REAL (toX, U"To x", U"1.0")
+	REAL (fromY, U"From y", U"0.0")
+	REAL (toY, U"To y", U"1.0")
 	OK
 DO
 	GRAPHICS_NONE
@@ -968,10 +1020,10 @@ DO
 }
 
 FORM (GRAPHICS_Axes, U"Praat picture: Axes", U"Axes...") {
-	REAL4 (left, U"left Left and right", U"0.0")
-	REAL4 (right, U"right Left and right", U"1.0")
-	REAL4 (bottom, U"left Bottom and top", U"0.0")
-	REAL4 (top, U"right Bottom and top", U"1.0")
+	REAL (left, U"left Left and right", U"0.0")
+	REAL (right, U"right Left and right", U"1.0")
+	REAL (bottom, U"left Bottom and top", U"0.0")
+	REAL (top, U"right Bottom and top", U"1.0")
 OK
 	double x1WC, x2WC, y1WC, y2WC;
 	Graphics_inqWindow (GRAPHICS, & x1WC, & x2WC, & y1WC, & y2WC);
@@ -996,8 +1048,8 @@ DIRECT (GRAPHICS_DrawInnerBox) {
 }
 
 FORM (GRAPHICS_TextLeft, U"Praat picture: Text left", U"Text left/right/top/bottom...") {
-	BOOLEAN4 (farr, U"Far", true)
-	TEXTFIELD4 (text, U"text", U"")
+	BOOLEAN (farr, U"Far", true)
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	GRAPHICS_NONE
@@ -1006,8 +1058,8 @@ DO
 }
 
 FORM (GRAPHICS_TextRight, U"Praat picture: Text right", U"Text left/right/top/bottom...") {
-	BOOLEAN4 (farr, U"Far", true)
-	TEXTFIELD4 (text, U"text", U"")
+	BOOLEAN (farr, U"Far", true)
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	GRAPHICS_NONE
@@ -1016,8 +1068,8 @@ DO
 }
 
 FORM (GRAPHICS_TextTop, U"Praat picture: Text top", U"Text left/right/top/bottom...") {
-	BOOLEAN4 (farr, U"Far", true)
-	TEXTFIELD4 (text, U"text", U"")
+	BOOLEAN (farr, U"Far", true)
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	GRAPHICS_NONE
@@ -1026,8 +1078,8 @@ DO
 }
 
 FORM (GRAPHICS_TextBottom, U"Praat picture: Text bottom", U"Text left/right/top/bottom...") {
-	BOOLEAN4 (farr, U"Far", true)
-	TEXTFIELD4 (text, U"text", U"")
+	BOOLEAN (farr, U"Far", true)
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	GRAPHICS_NONE
@@ -1036,11 +1088,11 @@ DO
 }
 
 #define FIELDS_MARKS_EVERY  \
-	POSITIVE4 (units, U"Units", U"1.0") \
-	POSITIVE4 (distance, U"Distance", U"0.1") \
-	BOOLEAN4 (writeNumbers, U"Write numbers", true) \
-	BOOLEAN4 (drawTicks, U"Draw ticks", true) \
-	BOOLEAN4 (drawDottedLines, U"Draw dotted lines", true)
+	POSITIVE (units, U"Units", U"1.0") \
+	POSITIVE (distance, U"Distance", U"0.1") \
+	BOOLEAN (writeNumbers, U"Write numbers", true) \
+	BOOLEAN (drawTicks, U"Draw ticks", true) \
+	BOOLEAN (drawDottedLines, U"Draw dotted lines", true)
 
 FORM (GRAPHICS_MarksLeftEvery, U"Praat picture: Marks left every...", U"Marks left/right/top/bottom every...") {
 	FIELDS_MARKS_EVERY
@@ -1079,10 +1131,10 @@ DO
 }
 
 #define FIELDS_MARKS  \
-	NATURAL4 (numberOfMarks, U"Number of marks", U"6") \
-	BOOLEAN4 (writeNumbers, U"Write numbers", true) \
-	BOOLEAN4 (drawTicks, U"Draw ticks", true) \
-	BOOLEAN4 (drawDottedLines, U"Draw dotted lines", true)
+	NATURAL (numberOfMarks, U"Number of marks", U"6") \
+	BOOLEAN (writeNumbers, U"Write numbers", true) \
+	BOOLEAN (drawTicks, U"Draw ticks", true) \
+	BOOLEAN (drawDottedLines, U"Draw dotted lines", true)
 
 FORM (GRAPHICS_MarksLeft, U"Praat picture: Marks left", U"Marks left/right/top/bottom...") {
 	FIELDS_MARKS
@@ -1125,10 +1177,10 @@ DO
 }
 
 #define FIELDS_MARKS_LOGARITHMIC  \
-	NATURAL4 (marksPerDecade, U"Marks per decade", U"3") \
-	BOOLEAN4 (writeNumbers, U"Write numbers", true) \
-	BOOLEAN4 (drawTicks, U"Draw ticks", true) \
-	BOOLEAN4 (drawDottedLines, U"Draw dotted lines", true)
+	NATURAL (marksPerDecade, U"Marks per decade", U"3") \
+	BOOLEAN (writeNumbers, U"Write numbers", true) \
+	BOOLEAN (drawTicks, U"Draw ticks", true) \
+	BOOLEAN (drawDottedLines, U"Draw dotted lines", true)
 
 FORM (GRAPHICS_LogarithmicMarksLeft, U"Praat picture: Logarithmic marks left", U"Logarithmic marks left/right/top/bottom...") {
 	FIELDS_MARKS_LOGARITHMIC
@@ -1173,12 +1225,12 @@ static void sortBoundingBox (double *x1WC, double *x2WC, double *y1WC, double *y
 }
 
 FORM (GRAPHICS_OneMarkLeft, U"Praat picture: One mark left", U"One mark left/right/top/bottom...") {
-	REAL4 (position, U"Position", U"0.0")
-	BOOLEAN4 (writeNumber, U"Write number", true)
-	BOOLEAN4 (drawTick, U"Draw tick", true)
-	BOOLEAN4 (drawDottedLine, U"Draw dotted line", true)
+	REAL (position, U"Position", U"0.0")
+	BOOLEAN (writeNumber, U"Write number", true)
+	BOOLEAN (drawTick, U"Draw tick", true)
+	BOOLEAN (drawDottedLine, U"Draw dotted line", true)
 	LABEL (U"", U"Draw text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	double x1WC, x2WC, y1WC, y2WC, dy;
@@ -1196,12 +1248,12 @@ DO
 }
 
 FORM (GRAPHICS_OneMarkRight, U"Praat picture: One mark right", U"One mark left/right/top/bottom...") {
-	REAL4 (position, U"Position", U"0.0")
-	BOOLEAN4 (writeNumber, U"Write number", true)
-	BOOLEAN4 (drawTick, U"Draw tick", true)
-	BOOLEAN4 (drawDottedLine, U"Draw dotted line", true)
+	REAL (position, U"Position", U"0.0")
+	BOOLEAN (writeNumber, U"Write number", true)
+	BOOLEAN (drawTick, U"Draw tick", true)
+	BOOLEAN (drawDottedLine, U"Draw dotted line", true)
 	LABEL (U"", U"Draw text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	double x1WC, x2WC, y1WC, y2WC, dy;
@@ -1219,12 +1271,12 @@ DO
 }
 
 FORM (GRAPHICS_OneMarkTop, U"Praat picture: One mark top", U"One mark left/right/top/bottom...") {
-	REAL4 (position, U"Position", U"0.0")
-	BOOLEAN4 (writeNumber, U"Write number", true)
-	BOOLEAN4 (drawTick, U"Draw tick", true)
-	BOOLEAN4 (drawDottedLine, U"Draw dotted line", true)
+	REAL (position, U"Position", U"0.0")
+	BOOLEAN (writeNumber, U"Write number", true)
+	BOOLEAN (drawTick, U"Draw tick", true)
+	BOOLEAN (drawDottedLine, U"Draw dotted line", true)
 	LABEL (U"", U"Draw text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	double x1WC, x2WC, y1WC, y2WC, dx;
@@ -1242,12 +1294,12 @@ DO
 }
 
 FORM (GRAPHICS_OneMarkBottom, U"Praat picture: One mark bottom", U"One mark left/right/top/bottom...") {
-	REAL4 (position, U"Position", U"0.0")
-	BOOLEAN4 (writeNumber, U"Write number", true)
-	BOOLEAN4 (drawTick, U"Draw tick", true)
-	BOOLEAN4 (drawDottedLine, U"Draw dotted line", true)
+	REAL (position, U"Position", U"0.0")
+	BOOLEAN (writeNumber, U"Write number", true)
+	BOOLEAN (drawTick, U"Draw tick", true)
+	BOOLEAN (drawDottedLine, U"Draw dotted line", true)
 	LABEL (U"", U"Draw text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	double x1WC, x2WC, y1WC, y2WC, dx;
@@ -1265,12 +1317,12 @@ DO
 }
 
 FORM (GRAPHICS_OneLogarithmicMarkLeft, U"Praat picture: One logarithmic mark left", U"One logarithmic mark left/right/top/bottom...") {
-	REAL4 (position, U"Position", U"1.0")
-	BOOLEAN4 (writeNumber, U"Write number", 1)
-	BOOLEAN4 (drawTick, U"Draw tick", 1)
-	BOOLEAN4 (drawDottedLine, U"Draw dotted line", 1)
+	REAL (position, U"Position", U"1.0")
+	BOOLEAN (writeNumber, U"Write number", 1)
+	BOOLEAN (drawTick, U"Draw tick", 1)
+	BOOLEAN (drawDottedLine, U"Draw dotted line", 1)
 	LABEL (U"", U"Draw text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	double x1WC, x2WC, y1WC, y2WC, dy;
@@ -1288,12 +1340,12 @@ DO
 }
 
 FORM (GRAPHICS_OneLogarithmicMarkRight, U"Praat picture: One logarithmic mark right", U"One logarithmic mark left/right/top/bottom...") {
-	REAL4 (position, U"Position", U"1.0")
-	BOOLEAN4 (writeNumber, U"Write number", 1)
-	BOOLEAN4 (drawTick, U"Draw tick", 1)
-	BOOLEAN4 (drawDottedLine, U"Draw dotted line", 1)
+	REAL (position, U"Position", U"1.0")
+	BOOLEAN (writeNumber, U"Write number", 1)
+	BOOLEAN (drawTick, U"Draw tick", 1)
+	BOOLEAN (drawDottedLine, U"Draw dotted line", 1)
 	LABEL (U"", U"Draw text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	double x1WC, x2WC, y1WC, y2WC, dy;
@@ -1311,12 +1363,12 @@ DO
 }
 
 FORM (GRAPHICS_OneLogarithmicMarkTop, U"Praat picture: One logarithmic mark top", U"One logarithmic mark left/right/top/bottom...") {
-	REAL4 (position, U"Position", U"1.0")
-	BOOLEAN4 (writeNumber, U"Write number", 1)
-	BOOLEAN4 (drawTick, U"Draw tick", 1)
-	BOOLEAN4 (drawDottedLine, U"Draw dotted line", 1)
+	REAL (position, U"Position", U"1.0")
+	BOOLEAN (writeNumber, U"Write number", 1)
+	BOOLEAN (drawTick, U"Draw tick", 1)
+	BOOLEAN (drawDottedLine, U"Draw dotted line", 1)
 	LABEL (U"", U"Draw text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	double x1WC, x2WC, y1WC, y2WC, dx;
@@ -1334,12 +1386,12 @@ DO
 }
 
 FORM (GRAPHICS_OneLogarithmicMarkBottom, U"Praat picture: One logarithmic mark bottom", U"One logarithmic mark left/right/top/bottom...") {
-	REAL4 (position, U"Position", U"1.0")
-	BOOLEAN4 (writeNumber, U"Write number", 1)
-	BOOLEAN4 (drawTick, U"Draw tick", 1)
-	BOOLEAN4 (drawDottedLine, U"Draw dotted line", 1)
+	REAL (position, U"Position", U"1.0")
+	BOOLEAN (writeNumber, U"Write number", 1)
+	BOOLEAN (drawTick, U"Draw tick", 1)
+	BOOLEAN (drawDottedLine, U"Draw dotted line", 1)
 	LABEL (U"", U"Draw text:")
-	TEXTFIELD4 (text, U"text", U"")
+	TEXTFIELD (text, U"text", U"")
 	OK
 DO
 	double x1WC, x2WC, y1WC, y2WC, dx;
@@ -1357,7 +1409,7 @@ DO
 }
 
 FORM (GRAPHICS_HorizontalMmToWorldCoordinates, U"Compute horizontal distance in world coordinates", nullptr) {
-	REAL4 (distance, U"Distance (mm)", U"10.0")
+	REAL (distance, U"Distance (mm)", U"10.0")
 	OK
 DO
 	Graphics_setFontSize (GRAPHICS, theCurrentPraatPicture -> fontSize);
@@ -1369,7 +1421,7 @@ DO
 END }
 
 FORM (GRAPHICS_HorizontalWorldCoordinatesToMm, U"Compute horizontal distance in millimetres", nullptr) {
-	REAL4 (distance, U"Distance (wc)", U"0.1")
+	REAL (distance, U"Distance (wc)", U"0.1")
 	OK
 DO
 	Graphics_setFontSize (GRAPHICS, theCurrentPraatPicture -> fontSize);
@@ -1381,7 +1433,7 @@ DO
 END }
 
 FORM (GRAPHICS_VerticalMmToWorldCoordinates, U"Compute vertical distance in world coordinates", nullptr) {
-	REAL4 (distance, U"Distance (mm)", U"10.0")
+	REAL (distance, U"Distance (mm)", U"10.0")
 	OK
 DO
 	Graphics_setFontSize (GRAPHICS, theCurrentPraatPicture -> fontSize);
@@ -1393,7 +1445,7 @@ DO
 END }
 
 FORM (GRAPHICS_VerticalWorldCoordinatesToMm, U"Compute vertical distance in millimetres", nullptr) {
-	REAL4 (distance, U"Distance (wc)", U"1.0")
+	REAL (distance, U"Distance (wc)", U"1.0")
 	OK
 DO
 	Graphics_setFontSize (GRAPHICS, theCurrentPraatPicture -> fontSize);
@@ -1405,7 +1457,7 @@ DO
 END }
 
 FORM (GRAPHICS_TextWidth_worldCoordinates, U"Text width in world coordinates", nullptr) {
-	TEXTFIELD4 (text, U"text", U"Hello world")
+	TEXTFIELD (text, U"text", U"Hello world")
 	OK
 DO
 	Graphics_setFont (GRAPHICS, static_cast<kGraphics_font> (theCurrentPraatPicture -> font));
@@ -1418,7 +1470,7 @@ DO
 END }
 
 FORM (GRAPHICS_TextWidth_mm, U"Text width in millimetres", nullptr) {
-	TEXTFIELD4 (text, U"text", U"Hello world")
+	TEXTFIELD (text, U"text", U"Hello world")
 	OK
 DO
 	Graphics_setFont (GRAPHICS, static_cast<kGraphics_font> (theCurrentPraatPicture -> font));
@@ -1431,10 +1483,10 @@ DO
 END }
 
 FORM (GRAPHICS_PostScriptTextWidth_worldCoordinates, U"PostScript text width in world coordinates", nullptr) {
-	RADIO4x (phoneticFont, U"Phonetic font", 1, 0)
+	RADIOx (phoneticFont, U"Phonetic font", 1, 0)
 		RADIOBUTTON (U"XIPA")
 		RADIOBUTTON (U"SILIPA")
-	TEXTFIELD4 (text, U"text", U"Hello world")
+	TEXTFIELD (text, U"text", U"Hello world")
 	OK
 DO
 	Graphics_setFont (GRAPHICS, static_cast<kGraphics_font> (theCurrentPraatPicture -> font));
@@ -1447,10 +1499,10 @@ DO
 END }
 
 FORM (GRAPHICS_PostScriptTextWidth_mm, U"PostScript text width in millimetres", nullptr) {
-	RADIO4x (phoneticFont, U"Phonetic font", 1, 0)
+	RADIOx (phoneticFont, U"Phonetic font", 1, 0)
 		RADIOBUTTON (U"XIPA")
 		RADIOBUTTON (U"SILIPA")
-	TEXTFIELD4 (text, U"text", U"Hello world")
+	TEXTFIELD (text, U"text", U"Hello world")
 	OK
 DO
 	Graphics_setFont (GRAPHICS, static_cast<kGraphics_font> (theCurrentPraatPicture -> font));
@@ -1643,7 +1695,7 @@ void praat_picture_editor_close () {
 	praat_picture_close ();
 }
 
-static autoDaata pictureRecognizer (int nread, const char *header, MelderFile file) {
+static autoDaata pictureRecognizer (integer nread, const char *header, MelderFile file) {
 	if (nread < 2) return autoDaata ();
 	if (strnequ (header, "PraatPictureFile", 16)) {
 		Picture_readFromPraatPictureFile (praat_picture.get(), file);
diff --git a/sys/praat_version.h b/sys/praat_version.h
index 6254488..0f5fb05 100644
--- a/sys/praat_version.h
+++ b/sys/praat_version.h
@@ -1,5 +1,5 @@
-#define PRAAT_VERSION_STR 6.0.32
-#define PRAAT_VERSION_NUM 6032
+#define PRAAT_VERSION_STR 6.0.33
+#define PRAAT_VERSION_NUM 6033
 #define PRAAT_YEAR 2017
 #define PRAAT_MONTH September
-#define PRAAT_DAY 16
+#define PRAAT_DAY 26
diff --git a/test/sys/graphicsText.praat b/test/sys/graphicsText.praat
new file mode 100644
index 0000000..7200c11
--- /dev/null
+++ b/test/sys/graphicsText.praat
@@ -0,0 +1,27 @@
+# graphicsText.praat
+# Paul Boersma 2017-09-19
+
+Erase all
+Select outer viewport: 0, 6, 0, 9
+Axes: 0, 100, 50, 100
+Times
+12
+Text: 0, "left", 99, "half", "Getting graphical text right is not a trivial task:"
+Text: 0, "left", 98, "half", "many types of glitches are possible."
+Text: 0, "left", 95, "half", "Code might be misaligned as in: $$< > <> <= = >=$, you see?"
+Courier
+text$ = "Code might be misaligned as in: $$< > <> <= = >=$, you see?"
+Text: 0, "left", 94, "half", text$
+width = Text width (world coordinates): text$
+Text: width, "left", 94, "half", "... and here it continues"
+Text: 0, "left", 93, "half", "a / b, a/b, a / b, a/b, a / b, a/b, a / b, a /b, a/ b"
+Times
+Text: 0, "left", 92, "half", "a / b, a/b, a / b"
+Courier
+Text: 0, "left", 90, "half", "The space might be too small in: Now %%you% try."
+Times
+Text: 0, "left", 89, "half", "The space might be too small in: Now %%you% try."
+
+Text: 0, "left", 88, "half", "A lot of normal text might cause ##misalignment# misalignment misalignment of the f in: (%%false%)"
+Text: 0, "left", 87, "half", "(%%false%) now at the beginning of the line"
+
diff --git a/test/sys/object.praat b/test/sys/object.praat
index 8345c70..9cc3adf 100644
--- a/test/sys/object.praat
+++ b/test/sys/object.praat
@@ -1,6 +1,17 @@
 writeInfoLine: "object[]..."
 nsamp = 44100
 x.Sound = Create Sound from formula: "sineWithNoise", 1, 0, 1, nsamp, "1/2 * sin(2*pi*377*x) + randomGauss(0,0.1)"
+assert object [x.Sound]. xmin = 0
+assert object [x.Sound]. xmax = 1
+assert object [x.Sound]. ncol = nsamp
+assert object [x.Sound]. nx = nsamp
+assert object [x.Sound]. dx = 1 / 44100
+;assert object [x.Sound]. x1 = 0.5 / 44100
+assert object [x.Sound]. ymin = 1
+assert object [x.Sound]. ymax = 1
+assert object [x.Sound]. nrow = 1
+assert object [x.Sound]. ny = 1
+assert object [x.Sound]. dy = 1
 niter = 1e3
 stopwatch
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/praat.git



More information about the debian-med-commit mailing list