diff --git a/src/test/cord-api/Framework/utils/utils.py b/src/test/cord-api/Framework/utils/utils.py
index 153ef72..6fa9bfe 100644
--- a/src/test/cord-api/Framework/utils/utils.py
+++ b/src/test/cord-api/Framework/utils/utils.py
@@ -279,13 +279,13 @@
             dnames.append(names.copy())
         return dnames
 
-    def generate_random_value(self, value):
+    def generate_random_value(self, value, max_length=10, min_int=1, max_int=10000):
         if value == 'string':
-                return ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(10))
+                return ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(max_length))
         if value == 'bool':
                 return random.choice([True, False])
         if value == 'int32' or value == 'uint32':
-                return random.randint(1,10000)
+                return random.randint(min_int,max_int)
         if value == 'float':
             return random.uniform(1,10)
         if value == 'role':
@@ -296,9 +296,11 @@
             return random.choice(['m1.large', 'm1.medium', 'm1.small'])
         if value == 'vlan_tag':
             return random.choice(['555', '1-4096', 'ANY'])
+        if value == 'ip_address':
+            return ".".join(str(random.randint(0, 255)) for _ in range(4))
         else:
             return None
 
     def generate_random_slice_name(self):
         random_name = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(10))
-        return 'testloginbase' + random_name
\ No newline at end of file
+        return 'testloginbase' + random_name
diff --git a/src/test/cord-api/Tests/xos-test-service/test-service.robot b/src/test/cord-api/Tests/xos-test-service/test-service.robot
index 013ead4..220c4b4 100644
--- a/src/test/cord-api/Tests/xos-test-service/test-service.robot
+++ b/src/test/cord-api/Tests/xos-test-service/test-service.robot
@@ -1,3 +1,4 @@
+
 # XOS Core Test
 #
 # This test will validate the xos-core's sync steps and model policies using the TestService
@@ -32,17 +33,62 @@
     ${resp}=    CORD Post    ${testservice_si}     ${data}
     ${json_content}=    To Json    ${resp.content}
     ${test_serviceinstance_id}=    Get From Dictionary    ${json_content}    id
+    ${default_float}=    Get From Dictionary    ${json_content}    optional_float_with_default
+    ${default_string}=    Get From Dictionary    ${json_content}    optional_string_with_default
+    ${default_int}=    Get From Dictionary    ${json_content}    optional_int_with_default
     Set Suite Variable    ${test_serviceinstance_id}
     Set Suite Variable    ${model_name}
+    Set Suite Variable    ${default_float}
+    Set Suite Variable    ${default_string}
+    Set Suite Variable    ${default_int}
     Repeat Keyword    10s    Validate Duplicate Model    false
 
-Update Model with Duplicate
-    [Tags]    update
+Replicate Model with Duplicate
+    [Tags]    replicate
     CORD Put    ${testservice_si}     {'create_duplicate': ${true}}    ${test_serviceinstance_id}
-    Wait Until Keyword Succeeds    60s    2s    Validate Duplicate Model    true
+    Wait Until Keyword Succeeds    15s    2s    Validate Duplicate Model    true
+
+Update Model Values and Validate on Duplicate
+    [Tags]    update
+    ##create optional strings
+    @{choices}=    Create List    one    two
+    ${optional_string}=    Generate Random Value    string    max_length=50
+    ${optional_string_choice}=    Evaluate    random.choice($choices)    random
+    ${optional_string_max_length}=    Generate Random Value    string    max_length=32
+    ${optional_string_date}=    Get Current Date    result_format=%m-%d-%Y
+    ${optional_string_ip}=    Generate Random Value    ip_address
+    ##create optional ints
+    @{choices}=    Create List    one    two
+    ${optional_integer_min}=    Generate Random Value    int32    min_int=100
+    ${optional_integer_max}=    Generate Random Value    int32    max_int=199
+    ${optional_string_choice}=    Evaluate    random.choice($choices)    random
+    ${optional_string_max_length}=    Generate Random Value    string    max_length=32
+    #${optional_string_max}=    Get Substring    ${optional_string_max_length}    0    32
+    ${optional_string_date}=    Get Current Date    result_format=%m-%d-%Y
+    ${optional_string_ip}=    Generate Random Value    ip_address
+    ##create optional float
+    ${optional_float}=    Generate Random Value    float
+    Set Suite Variable    ${optional_string}
+    Set Suite Variable    ${optional_string_choice}
+    Set Suite Variable    ${optional_string_max_length}
+    Set Suite Variable    ${optional_string_date}
+    Set Suite Variable    ${optional_string_ip}
+    Set Suite Variable    ${optional_integer_min}
+    Set Suite Variable    ${optional_integer_max}
+    Set Suite Variable    ${optional_float}
+    ${data}=    Create Dictionary    optional_string=${optional_string}
+    Set To Dictionary    ${data}    optional_string_with_choices=${optional_string_choice}
+    Set To Dictionary    ${data}    optional_string_max_length=${optional_string_max_length}
+    #Set To Dictionary    ${data}    optional_string_date=${optional_string_date}
+    Set To Dictionary    ${data}    optional_string_ip=${optional_string_ip}
+    Set To Dictionary    ${data}    optional_int_with_min=${optional_integer_min}
+    Set To Dictionary    ${data}    optional_int_with_max=${optional_integer_max}
+    Set To Dictionary    ${data}    optional_float=${optional_float}
+    CORD Put    ${testservice_si}    ${data}    ${test_serviceinstance_id}
+    Wait Until Keyword Succeeds    60s    2s    Validate Duplicate Model with Updates
 
 Revert Model
-    [Tags]    revert    notready
+    [Tags]    revert
     CORD Put    ${testservice_si}     {'create_duplicate': ${false}}    ${test_serviceinstance_id}
     Wait Until Keyword Succeeds    60s    2s    Validate Duplicate Model    false
 
@@ -73,3 +119,23 @@
     [Arguments]    ${data}
     ${dict}=    Get From List    ${data['items']}    0
     Should Be Equal As Strings    ${dict['name']}    ${model_name}
+    Should Be Equal As Strings    ${dict['optional_float_with_default']}    ${default_float}
+    Should Be Equal As Strings    ${dict['optional_string_with_default']}    ${default_string}
+    Should Be Equal As Strings    ${dict['optional_int_with_default']}    ${default_int}
+
+Validate Duplicate Model with Updates
+    ${resp}=    CORD Get    ${testservice_duplicate_si}
+    ${jsondata}=    To Json    ${resp.content}
+    ${dict}=    Get From List    ${jsondata['items']}    0
+    Should Be Equal As Strings    ${dict['name']}    ${model_name}
+    Should Be Equal As Strings    ${dict['optional_float_with_default']}    ${default_float}
+    Should Be Equal As Strings    ${dict['optional_string_with_default']}    ${default_string}
+    Should Be Equal As Strings    ${dict['optional_int_with_default']}    ${default_int}
+    Should Be Equal As Strings    ${dict['optional_string']}    ${optional_string}
+    Should Be Equal As Strings    ${dict['optional_string_with_choices']}    ${optional_string_choice}
+    Should Be Equal As Strings    ${dict['optional_string_max_length']}    ${optional_string_max_length}
+    Should Be Equal As Strings    ${dict['optional_string_ip']}    ${optional_string_ip}
+    Should Be Equal As Strings    ${dict['optional_int_with_min']}    ${optional_integer_min}
+    Should Be Equal As Strings    ${dict['optional_int_with_max']}    ${optional_integer_max}
+    ${float_diff}=    Evaluate    abs(${optional_float} - ${dict['optional_float']})
+    Should Be True    ${float_diff} < .0005
