diff --git a/tf_fuzz/tfz-cpp/calls/crypto_call.cpp b/tf_fuzz/tfz-cpp/calls/crypto_call.cpp
index 4ff2ce3..b800baa 100644
--- a/tf_fuzz/tfz-cpp/calls/crypto_call.cpp
+++ b/tf_fuzz/tfz-cpp/calls/crypto_call.cpp
@@ -237,7 +237,7 @@
     // (call_code already loaded by constructor)
     find_replace_all ("$policy", asset_info.get_name(), call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -280,7 +280,7 @@
     // (call_code already loaded by constructor)
     find_replace_all ("$policy", asset_info.get_name(), call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -326,7 +326,7 @@
     find_replace_all ("$policy", asset_info.get_name(), call_code);
     find_replace_1st ("$flag", policy.usage_string, call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -373,7 +373,7 @@
                                          : "PSA_KEY_LIFETIME_VOLATILE",
                       call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -417,7 +417,7 @@
     find_replace_all ("$policy", asset_info.get_name(), call_code);
     find_replace_1st ("$size", to_string (policy.n_bits), call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -461,7 +461,7 @@
     find_replace_all ("$policy", asset_info.get_name(), call_code);
     find_replace_1st ("$type", policy.key_type, call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -505,7 +505,7 @@
     find_replace_all ("$policy", asset_info.get_name(), call_code);
     find_replace_1st ("$algorithm", policy.key_algorithm, call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -548,7 +548,7 @@
     find_replace_1st ("$policy", asset_info.get_name(), call_code);
     find_replace_1st ("$usage", "0", call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -602,7 +602,7 @@
     find_replace_all ("$policy", asset_info.get_name(), call_code);
     find_replace_1st ("$life", asset_info.get_name() + "_life", call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -657,7 +657,7 @@
     find_replace_all ("$policy", asset_info.get_name(), call_code);
     find_replace_1st ("$size", asset_info.get_name() + "_size", call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -711,7 +711,7 @@
     find_replace_all ("$policy", asset_info.get_name(), call_code);
     find_replace_1st ("$type", asset_info.get_name() + "_type", call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -765,7 +765,7 @@
     find_replace_all ("$policy", asset_info.get_name(), call_code);
     find_replace_1st ("$algorithm", asset_info.get_name() + "_algo", call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -819,7 +819,7 @@
     find_replace_all ("$policy", asset_info.get_name(), call_code);
     find_replace_1st ("$usage", asset_info.get_name() + "_usage", call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -881,7 +881,7 @@
     find_replace_1st ("$print_usage_false_string", policy.print_usage_false_string,
                       call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -927,7 +927,7 @@
     find_replace_all ("key", asset_info.get_name(), call_code);
     find_replace_all ("$policy", policy.asset_2_name, call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -982,7 +982,7 @@
     find_replace_all ("$policy", policy.asset_2_name, call_code);
     find_replace_all ("$key", asset_info.get_name(), call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -1055,7 +1055,7 @@
     find_replace_all ("$length", to_string (policy.n_bits), call_code);
     find_replace_all ("$key", asset_info.get_name(), call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -1111,6 +1111,8 @@
     find_replace_all ("$policy", policy.asset_2_name, call_code);
     find_replace_all ("$copy", asset_info.get_name(), call_code);
 
+    // TODO:: move error code modelling code to simulate().
+
     // Calculate the expected results:
     asset_search find_result;
     vector<psa_asset*>::iterator asset;
@@ -1120,10 +1122,10 @@
         find_or_create_key_asset (psa_asset_search::name, psa_asset_usage::active,
                                   policy.asset_3_name, (uint64_t) 0, dummy,
                                   dont_create_asset, asset);
+
+
     if (find_result != asset_search::found_active) {
-        exp_data.pf_specified = true;
-        exp_data.pf_result_string = "PSA_ERROR_INVALID_ARGUMENT";
-            // TODO:  Pull this in from boilerplate file
+        exp_data.expect_error_code("PSA_ERROR_INVALID_ARGUMENT");
     } else {
         // See if the new policy does not exist:
         find_result = test_state->
@@ -1131,17 +1133,15 @@
                                          policy.asset_2_name, (uint64_t) 0, dummy,
                                          dont_create_asset, asset);
         if (find_result != asset_search::found_active) {
-            exp_data.pf_specified = true;
-            exp_data.pf_result_string = "PSA_ERROR_INVALID_ARGUMENT";
-                // TODO:  Pull this in from boilerplate file
+            exp_data.expect_error_code("PSA_ERROR_INVALID_ARGUMENT");
+
         } else if (!(*asset)->policy.copyable) {
             // See if the source key does not support export:
             // TODO:  Or wait, it's the original policy for the key, right?
-            exp_data.pf_specified = true;
-            exp_data.pf_result_string = "PSA_ERROR_NOT_PERMITTED";
+            exp_data.expect_error_code("PSA_ERROR_NOT_PERMITTED");
         }
     }
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -1286,15 +1286,16 @@
     find_replace_1st ("$act_size", actual_length_var_name, call_code);
     find_replace_1st ("$length", length_var_name, call_code);
 
+    // TODO: move error checking code to simulate().
+
     // TODO:  check data?
 
     // See if the source key did not exist:
     if (!policy.exportable) {
         // See if the source key does not support export:
-        exp_data.pf_specified = true;
-        exp_data.pf_result_string = "PSA_ERROR_NOT_PERMITTED";
+        exp_data.expect_error_code("PSA_ERROR_NOT_PERMITTED");
     }
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -1339,7 +1340,7 @@
     // (call_code already loaded by constructor)
     find_replace_all ("$key", asset_info.get_name(), call_code);
     // Calculate the expected results:
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
diff --git a/tf_fuzz/tfz-cpp/calls/crypto_call.hpp b/tf_fuzz/tfz-cpp/calls/crypto_call.hpp
index 782bb1b..ff43b45 100644
--- a/tf_fuzz/tfz-cpp/calls/crypto_call.hpp
+++ b/tf_fuzz/tfz-cpp/calls/crypto_call.hpp
@@ -534,9 +534,9 @@
 public:
     // Data members:
     // Methods:
-        bool copy_call_to_asset (void);
-        void fill_in_prep_code (void);
-        void fill_in_command (void);
+        bool copy_call_to_asset (void) override;
+        void fill_in_prep_code (void) override;
+        void fill_in_command (void) override;
         read_key_data_call (tf_fuzz_info *test_state, long &asset_ser_no,
                             asset_search how_asset_found);  // (constructor)
         ~read_key_data_call (void);
@@ -557,9 +557,9 @@
 public:
     // Data members:
     // Methods:
-        bool copy_call_to_asset (void);
-        void fill_in_prep_code (void);
-        void fill_in_command (void);
+        bool copy_call_to_asset (void) override;
+        void fill_in_prep_code (void) override;
+        void fill_in_command (void) override;
         remove_key_call (tf_fuzz_info *test_state, long &asset_ser_no,
                          asset_search how_asset_found);  // (constructor)
         ~remove_key_call (void);
diff --git a/tf_fuzz/tfz-cpp/calls/psa_call.cpp b/tf_fuzz/tfz-cpp/calls/psa_call.cpp
index 1bb8c46..7ca407e 100644
--- a/tf_fuzz/tfz-cpp/calls/psa_call.cpp
+++ b/tf_fuzz/tfz-cpp/calls/psa_call.cpp
@@ -60,13 +60,17 @@
 
 void psa_call::write_out_check_code (ofstream &test_file)
 {
-    if (!exp_data.pf_nothing) {
+    if (exp_data.result_code_checking_enabled()) {
         test_file << check_code;
     } else {
         test_file << "    /* (No checks for this PSA call.) */" << endl;
     }
 }
 
+bool psa_call::simulate(void) {
+    return false;
+}
+
 /**********************************************************************************
    End of methods of class psa_call.
 **********************************************************************************/
@@ -81,15 +85,15 @@
 
    This is a big part of where the target modeling -- error modeling -- occurs,
    so lots of room for further refinement here. */
-void sst_call::calc_result_code (void)
+void sst_call::fill_in_result_code (void)
 {
-    string formalized;  // "proper" result string
 
-    if (exp_data.pf_nothing) { // do not generate result checks
+    string formalized;  // "proper" result string
+    switch (exp_data.get_expected_return_code()) {
+    case expected_return_code_t::DontCare: // Do not generate checks
         return;
 
-    }
-    if (exp_data.pf_pass) { // expect pass
+    case expected_return_code_t::Pass:
         find_replace_all ("$expect",
                           test_state->bplate->bplate_string[sst_pass_string],
                           check_code);
@@ -99,37 +103,38 @@
                           "0",
                           check_code);
 
-    } else if (exp_data.pf_fail) { // expect fail
+        break;
 
-      // If the command is `... check "foo" expect fail;`, the fail
-      // binds to the check, not the command itself.
-      if (exp_data.data_specified) {
-        // expect a pass for the sst call itself.
-        find_replace_all ("$expect",
-                          test_state->bplate->bplate_string[sst_pass_string],
-                          check_code);
+    case expected_return_code_t::Fail:
+        // If the command is `... check "foo" expect fail;`, the fail
+        // binds to the check, not the command itself.
+        if (exp_data.data_specified) {
+          // expect a pass for the sst call itself.
+          find_replace_all ("$expect",
+                            test_state->bplate->bplate_string[sst_pass_string],
+                            check_code);
 
-        // expect a failure for the check.
-        find_replace_all ("!= $check_expect",
-                          "== 0",
-                          check_code);
+          // expect a failure for the check.
+          find_replace_all ("!= $check_expect",
+                            "== 0",
+                            check_code);
 
-        find_replace_1st ("should be equal", "should not be equal",
-                          check_code);
-        } else {
-        // Check for not-success:
-        find_replace_1st ("!=", "==",
-                          check_code);
-        find_replace_all ("$expect",
-                          test_state->bplate->bplate_string[sst_pass_string],
-                          check_code);
-        find_replace_1st ("expected ", "expected not ",
-                          check_code);
+          find_replace_1st ("should be equal", "should not be equal",
+                            check_code);
+          } else {
+          // Check for not-success:
+          find_replace_1st ("!=", "==",
+                            check_code);
+          find_replace_all ("$expect",
+                            test_state->bplate->bplate_string[sst_pass_string],
+                            check_code);
+          find_replace_1st ("expected ", "expected not ",
+                            check_code);
         }
-    }
+        break;
 
-    else if (exp_data.pf_specified) { // expect <PSA_ERROR_CODE>
-        formalized = formalize (exp_data.pf_result_string, "PSA_ERROR_");
+    case expected_return_code_t::SpecificFail:
+        formalized = formalize (exp_data.get_expected_return_code_string(), "PSA_ERROR_");
         find_replace_all ("$expect", formalized, check_code);
 
         // NOTE: Assumes that the variable used to store the actual
@@ -138,10 +143,10 @@
         find_replace_all ("!= $check_expect","== 0",check_code);
         find_replace_1st ("should be equal", "should not be equal",
                           check_code);
-    }
+        break;
 
-    else { // no explicit expect -- simulate
-
+    // TODO: move error code simulation into simulate().
+    case expected_return_code_t::DontKnow: // Simulate
         // Figure out what the message should read:
         switch (asset_info.how_asset_found) {
             case asset_search::found_active:
@@ -183,8 +188,9 @@
                 find_replace_1st ("should be equal", "should not be equal",
                                   check_code);
                 break;
+            }
+            break;
         }
-    }
 }
 
 vector<psa_asset*>::iterator sst_call::resolve_asset (bool create_asset_bool,
@@ -272,54 +278,63 @@
    improved and expanded upon *massively* more or less mirroring what is seen in
    .../test/suites/crypto/crypto_tests_common.c in the psa_key_interface_test()
    method, (starting around line 20ish). */
-void crypto_call::calc_result_code (void)
+void crypto_call::fill_in_result_code (void)
 {
     string formalized;  // "proper" result string
 
-    if (!exp_data.pf_nothing) {
-        if (exp_data.pf_pass) {
-            find_replace_all ("$expect",
-                              test_state->bplate->bplate_string[sst_pass_string],
-                              check_code);
-        } else if (exp_data.pf_fail) {
-            // Check for not-success:
-            find_replace_1st ("!=", "==",
-                              check_code);
-            find_replace_all ("$expect",
-                              test_state->bplate->bplate_string[sst_pass_string],
-                              check_code);
-            find_replace_1st ("expected ", "expected not ",
-                              check_code);
-        } else {
-            if (exp_data.pf_specified) {
-                formalized = formalize (exp_data.pf_result_string, "PSA_ERROR_");
-                find_replace_all ("$expect", formalized, check_code);
-            } else {
-                // Figure out what the message should read:
-                switch (asset_info.how_asset_found) {
-                    case asset_search::found_active:
-                    case asset_search::created_new:
-                        find_replace_all ("$expect",
-                                          test_state->bplate->
-                                              bplate_string[sst_pass_string],
-                                          check_code);
-                        break;
-                    case asset_search::not_found:
-                    case asset_search::found_deleted:
-                        find_replace_all ("$expect", "PSA_ERROR_INVALID_HANDLE",
-                                          check_code);  // TODO:  take from boilerplate
-                        break;
-                    default:
-                        find_replace_1st ("!=", "==",
-                                          check_code);  // like "fail", just make sure...
-                        find_replace_all ("$expect",
-                                          test_state->bplate->
-                                              bplate_string[sst_pass_string],
-                                          check_code);  // ... it's *not* PSA_SUCCESS
-                        break;
-                }
-            }
+    switch (exp_data.get_expected_return_code()) {
+
+    case expected_return_code_t::DontCare:
+        return;
+
+    case expected_return_code_t::Pass:
+        find_replace_all ("$expect",
+                          test_state->bplate->bplate_string[sst_pass_string],
+                          check_code);
+        break;
+
+    case expected_return_code_t::Fail:
+        // Check for not-success:
+        find_replace_1st ("!=", "==",
+                          check_code);
+        find_replace_all ("$expect",
+                          test_state->bplate->bplate_string[sst_pass_string],
+                          check_code);
+        find_replace_1st ("expected ", "expected not ",
+                          check_code);
+        break;
+
+    case expected_return_code_t::SpecificFail:
+        formalized = formalize (exp_data.get_expected_return_code_string(), "PSA_ERROR_");
+        find_replace_all ("$expect", formalized, check_code);
+        break;
+
+    // TODO: move error code simulation to simulate()
+    case expected_return_code_t::DontKnow: // Simulate
+        // Figure out what the message should read:
+        switch (asset_info.how_asset_found) {
+            case asset_search::found_active:
+            case asset_search::created_new:
+                find_replace_all ("$expect",
+                                  test_state->bplate->
+                                      bplate_string[sst_pass_string],
+                                  check_code);
+                break;
+            case asset_search::not_found:
+            case asset_search::found_deleted:
+                find_replace_all ("$expect", "PSA_ERROR_INVALID_HANDLE",
+                                  check_code);  // TODO:  take from boilerplate
+                break;
+            default:
+                find_replace_1st ("!=", "==",
+                                  check_code);  // like "fail", just make sure...
+                find_replace_all ("$expect",
+                                  test_state->bplate->
+                                      bplate_string[sst_pass_string],
+                                  check_code);  // ... it's *not* PSA_SUCCESS
+                break;
         }
+        break;
     }
 }
 
@@ -386,7 +401,7 @@
 
    Since there are no actual PSA calls associated with security calls (so far at least),
    this should never be invoked. */
-void security_call::calc_result_code (void)
+void security_call::fill_in_result_code (void)
 {
     // Currently should not be invoked.
     cerr << "\nError:  Internal:  Please report error #205 to TF-Fuzz developers." << endl;
diff --git a/tf_fuzz/tfz-cpp/calls/psa_call.hpp b/tf_fuzz/tfz-cpp/calls/psa_call.hpp
index 4aa8bda..08d7316 100644
--- a/tf_fuzz/tfz-cpp/calls/psa_call.hpp
+++ b/tf_fuzz/tfz-cpp/calls/psa_call.hpp
@@ -23,65 +23,110 @@
 class psa_call
 {
 public:
-    /* Data members -- not all PSA calls have/need these, but they need to be acces-
-       sible polymorphically via a psa_call iterator: */
-        string call_description;  // description of the call, just for tracing
-        expect_info exp_data;  // everything about expected results
-        set_data_info set_data;  // everything about setting PSA-asset-data values
-        asset_name_id_info asset_info;  // everything about the asset(s) for this line
-        key_policy_info policy;  // (specific to crypto, but have to put this here)
-        string asset_2_name;  // if there's a 2nd asset, then this is its name
-        string asset_3_name;  // if there's a 3rd asset, then this is its name
-        psa_asset_usage random_asset;
-            /* if asked to use some random asset from active or deleted, this says
-               which.  psa_asset_usage::all if not using this feature. */
-        bool assign_data_var_specified;  // asset data to/from named variable
-        string assign_data_var;  // name of variable to dump (assign) data into
-        // Expected-result info:
-        bool print_data;  // true to print asset data to test log
-        bool hash_data;  // true to hash data for later comparison
-        string id_string;  // not all PSA calls involve an ID, but a diverse set do
-        long call_ser_no;  // unique serial# for this psa_call (see note in tf_fuzz.hpp)
-        tf_fuzz_info *test_state;  // the big blob with pointers to everything going on
-        string barrier;
-            /* "barrier" is used for template-line operations that resolve a series of
-               PSA calls.  In particular, with respect to the fact that TF-Fuzz strives
-               to randomize these multiple calls where possible, meaning interspersing
-               them among other, earlier commands.  However, for example, calls to set
-               the aspects of a policy can't be pushed too far back, such as in among
-               calls setting that same policy for a previous operation!  "barrier" is
-               either "", in which case this call does not care whether you place calls
-               before it, or it contains the name of an asset that, calls related to
-               which must be placed *after* this call. */
-        string target_barrier;
-            /* asset to tell the psa_call objects to set and search barrier to when
-               re-ordering PSA calls.  For key policies, this is not necessarily the
-               nominal asset of that call.  For a policy call, it is that policy asset,
-               so that later re-settings of the same policy don't pollute the current
-               setting of that policy.  However, for key sets and reads, it is not the
-               key asset, but its policy. */
-    // Methods:
-        virtual vector<psa_asset*>::iterator resolve_asset (bool create_asset_bool,
-                                                            psa_asset_usage where) = 0;
-        virtual bool copy_call_to_asset (void) = 0;
-        virtual bool copy_asset_to_call (void) = 0;
-        virtual void fill_in_prep_code (void) = 0;
-        virtual void fill_in_command (void) = 0;
-        void write_out_prep_code (ofstream &test_file);
-        void write_out_command (ofstream &test_file);
-        void write_out_check_code (ofstream &test_file);
-        psa_call (tf_fuzz_info *test_state, long &asset_ser_no,
-                  asset_search how_asset_found);  // (constructor)
-        ~psa_call (void);
+    string call_description;  // description of the call, just for tracing
+    expect_info exp_data;  // everything about expected results
+    set_data_info set_data;  // everything about setting PSA-asset-data values
+    asset_name_id_info asset_info;  // everything about the asset(s) for this line
+    key_policy_info policy;  // (specific to crypto, but have to put this here)
+    string asset_2_name;  // if there's a 2nd asset, then this is its name
+    string asset_3_name;  // if there's a 3rd asset, then this is its name
+    psa_asset_usage random_asset;
+        /* if asked to use some random asset from active or deleted, this says
+           which.  psa_asset_usage::all if not using this feature. */
+    bool assign_data_var_specified;  // asset data to/from named variable
+    string assign_data_var;  // name of variable to dump (assign) data into
+    // Expected-result info:
+    bool print_data;  // true to print asset data to test log
+    bool hash_data;  // true to hash data for later comparison
+    string id_string;  // not all PSA calls involve an ID, but a diverse set do
+    long call_ser_no;  // unique serial# for this psa_call (see note in tf_fuzz.hpp)
+    tf_fuzz_info *test_state;  // the big blob with pointers to everything going on
+    string barrier;
+        /* "barrier" is used for template-line operations that resolve a series of
+           PSA calls.  In particular, with respect to the fact that TF-Fuzz strives
+           to randomize these multiple calls where possible, meaning interspersing
+           them among other, earlier commands.  However, for example, calls to set
+           the aspects of a policy can't be pushed too far back, such as in among
+           calls setting that same policy for a previous operation!  "barrier" is
+           either "", in which case this call does not care whether you place calls
+           before it, or it contains the name of an asset that, calls related to
+           which must be placed *after* this call. */
+    string target_barrier;
+        /* asset to tell the psa_call objects to set and search barrier to when
+           re-ordering PSA calls.  For key policies, this is not necessarily the
+           nominal asset of that call.  For a policy call, it is that policy asset,
+           so that later re-settings of the same policy don't pollute the current
+           setting of that policy.  However, for key sets and reads, it is not the
+           key asset, but its policy. */
+
+    virtual vector<psa_asset*>::iterator resolve_asset (bool create_asset_bool,
+                                                        psa_asset_usage where) = 0;
+
+    /// Updates asset based on call information.
+    ///
+    /// WARNING: previously, this used to be the place to do call simulation
+    /// logic such as modifiying assets. Code that does simulation or in any
+    /// way mutates the state should now instead go in simulate().
+    virtual bool copy_call_to_asset (void) = 0;
+
+    /// Updates call based on asset information.
+    virtual bool copy_asset_to_call (void) = 0;
+
+    /// Simulates the effect of the call, returning true if a change has been
+    /// made.
+    ///
+    /// This is called before asset simulatio takes place. For more details on
+    /// control flow, see simulate_calls().
+    ///
+    /// If no return code for the call was given in the template, this should be
+    /// updated here. However, if a return code is already present, it should
+    /// never be overwritten.
+    virtual bool simulate (void);
+
+    // TODO: move simulation and error modelling code code into simulate().
+    // once this is done, remove default impl so that simulate is mandatory for
+    // calls.
+    // ..
+    // In particular, need to move code from:
+    // ..
+    // - copy_call_to_asset
+    // ..
+    // - fill_in_command
+    // ..
+    // - fill_in_result_code
+
+    virtual void fill_in_prep_code (void) = 0;
+
+    /// WARNING: Previously, this used to also contain expected value
+    /// modelling code (alongside fill_in_command), and some error code
+    /// modelling may still be left over here. New expected value modelling code
+    /// should be put in simulate() where possible. Doing this gives a much
+    /// nicer split between the simulation step (simulate()), and the code
+    /// generation step (which this method is part of).
+    virtual void fill_in_command (void) = 0;
+
+    void write_out_prep_code (ofstream &test_file);
+    void write_out_command (ofstream &test_file);
+    void write_out_check_code (ofstream &test_file);
+    psa_call (tf_fuzz_info *test_state, long &asset_ser_no,
+              asset_search how_asset_found);  // (constructor)
+    ~psa_call (void);
 
 protected:
-    // Data members:
-        string prep_code;  // declarations and such prior to all of the calls
-        string call_code;  // for the call itself
-        string check_code;  // for the code to check success of the call
-        static long unique_id_counter;  // counts off unique IDs for assets
-    // Methods:
-        virtual void calc_result_code (void) = 0;
+    string prep_code;  // declarations and such prior to all of the calls
+    string call_code;  // for the call itself
+    string check_code;  // for the code to check success of the call
+    static long unique_id_counter;  // counts off unique IDs for assets
+
+    /// Fill in expected result checks.
+    ///
+    /// WARNING: Previously, this used to also contain expected value
+    /// modelling code (alongside fill_in_command), and some error code
+    /// modelling may still be left over here. New expected value modelling code
+    /// should be put in simulate() where possible. Doing this gives a much
+    /// nicer split between the simulation step (simulate()), and the code
+    /// generation step (which this method is part of).
+    virtual void fill_in_result_code (void) = 0;
 
 private:
     // Data members:
@@ -102,8 +147,7 @@
 
 protected:
     // Data members:
-    // Methods:
-        void calc_result_code (void);
+        void fill_in_result_code (void);
 
 private:
     // Data members:
@@ -123,7 +167,7 @@
 protected:
     // Data members:
     // Methods:
-        void calc_result_code (void);
+        void fill_in_result_code (void);
            // for now, the method-overide buck stops here, but that'll probably change
 
 private:
@@ -148,7 +192,7 @@
 protected:
     // Data members:
     // Methods:
-        void calc_result_code (void);
+        void fill_in_result_code (void);
            // Should never be invoked, since security calls generate no PSA calls.
 
 private:
diff --git a/tf_fuzz/tfz-cpp/calls/sst_call.cpp b/tf_fuzz/tfz-cpp/calls/sst_call.cpp
index 2c49d95..7cf1b62 100644
--- a/tf_fuzz/tfz-cpp/calls/sst_call.cpp
+++ b/tf_fuzz/tfz-cpp/calls/sst_call.cpp
@@ -171,13 +171,15 @@
     string id_string = to_string((long) asset_info.id_n);
     find_replace_1st ("$uid", id_string, call_code);
     find_replace_1st ("$length", length_var_name, call_code);
+
+    // TODO: move error code modelling to simulate().
+
     // Figure out what expected results:
-    if (   set_data.flags_string == "PSA_STORAGE_FLAG_WRITE_ONCE"
+    if (set_data.flags_string == "PSA_STORAGE_FLAG_WRITE_ONCE"
         && set_data.n_set_vars > 0) {
-        exp_data.pf_specified = true;
-        exp_data.pf_result_string = "PSA_ERROR_NOT_PERMITTED";
+        exp_data.expect_error_code("PSA_ERROR_NOT_PERMITTED");
     }
-    calc_result_code();
+    fill_in_result_code();
 }
 
 /**********************************************************************************
@@ -412,7 +414,7 @@
         find_replace_all ("$hash_var", hash_var_name, check_code);
     }
     // Figure out what expected results:
-    calc_result_code();  // this only fills $expect check_code
+    fill_in_result_code();  // this only fills $expect check_code
     // Fill in expected data, actual data, and length:
 }
 
@@ -482,7 +484,7 @@
     string id_string = to_string((long) asset_info.id_n);
     find_replace_1st ("$uid", id_string, call_code);
     // Fill in expected results:
-    calc_result_code();  // this only fills $expect check_code
+    fill_in_result_code();  // this only fills $expect check_code
 }
 
 /**********************************************************************************
