diff --git a/XML-RPC.xsd b/XML-RPC.xsd
new file mode 100644
index 0000000..a7e7567
--- /dev/null
+++ b/XML-RPC.xsd
@@ -0,0 +1,133 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+  <!-- The only two possible root elements are methodResponse and
+       methodCall so these are the only two I use a top-level
+       declaration for. --> 
+
+  <xsd:element name="methodCall">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element name="methodName">
+          <xsd:simpleType>
+            <xsd:restriction base="ASCIIString">
+              <xsd:pattern value="([A-Za-z0-9]|/|\.|:|_)*" />
+            </xsd:restriction>
+          </xsd:simpleType>
+        </xsd:element>
+        <xsd:element name="params" minOccurs="0" maxOccurs="1">
+          <xsd:complexType>
+            <xsd:sequence>
+              <xsd:element name="param"  type="ParamType" 
+                           minOccurs="0" maxOccurs="unbounded"/>
+            </xsd:sequence>
+          </xsd:complexType>
+         </xsd:element>
+      </xsd:all>
+    </xsd:complexType>  
+  </xsd:element>
+
+  <xsd:element name="methodResponse">
+    <xsd:complexType>
+      <xsd:choice>
+        <xsd:element name="params">
+          <xsd:complexType>
+            <xsd:sequence>
+              <xsd:element name="param" type="ParamType"/>
+            </xsd:sequence>
+          </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="fault">
+          <!-- What can appear inside a fault is very restricted -->
+          <xsd:complexType>
+            <xsd:sequence>
+              <xsd:element name="value">
+                <xsd:complexType>
+                  <xsd:sequence>
+                    <xsd:element name="struct"> 
+                      <xsd:complexType> 
+                        <xsd:sequence> 
+                          <xsd:element name="member" 
+                                       type="MemberType">
+                          </xsd:element>
+                          <xsd:element name="member" 
+                                       type="MemberType">
+                          </xsd:element>
+                        </xsd:sequence>
+                      </xsd:complexType>
+                    </xsd:element>
+                  </xsd:sequence>
+                </xsd:complexType>
+              </xsd:element>
+            </xsd:sequence>
+          </xsd:complexType>
+         </xsd:element>
+      </xsd:choice>
+    </xsd:complexType>  
+  </xsd:element>
+
+  <xsd:complexType name="ParamType">
+    <xsd:sequence>
+      <xsd:element name="value" type="ValueType"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="ValueType" mixed="true">
+    <!-- I need to figure out how to say that this
+         is either a simple xsd:string type or that 
+         it contains one of these elements; but that otherwise
+         it does not have mixed content -->
+    <xsd:choice>
+      <xsd:element name="i4"            type="xsd:int"/>
+      <xsd:element name="int"           type="xsd:int"/>
+      <xsd:element name="string"        type="ASCIIString"/>
+      <xsd:element name="double"        type="xsd:decimal"/>
+      <xsd:element name="Base64"        type="xsd:base64Binary"/>
+      <xsd:element name="boolean"       type="NumericBoolean"/>
+      <xsd:element name="dateTime.iso8601" type="xsd:dateTime"/>
+      <xsd:element name="array"         type="ArrayType"/>
+      <xsd:element name="struct"        type="StructType"/>
+    </xsd:choice>
+  </xsd:complexType>
+
+  <xsd:complexType name="StructType">
+    <xsd:sequence>
+      <xsd:element name="member" type="MemberType" 
+                   maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="MemberType">
+    <xsd:sequence>
+      <xsd:element name="name"  type="xsd:string" />
+      <xsd:element name="value" type="ValueType"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="ArrayType">
+    <xsd:sequence>
+      <xsd:element name="data">
+        <xsd:complexType>
+          <xsd:sequence>
+            <xsd:element name="value"  type="ValueType" 
+                         minOccurs="0" maxOccurs="unbounded"/>
+          </xsd:sequence>
+        </xsd:complexType>
+      </xsd:element>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:simpleType name="ASCIIString">
+    <xsd:restriction base="xsd:string">
+      <xsd:pattern value="([ -~]|\n|\r|\t)*" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="NumericBoolean">
+    <xsd:restriction base="xsd:boolean">
+      <xsd:pattern value="0|1" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+</xsd:schema>
+
diff --git a/XML_RPC.ttcn b/XML_RPC.ttcn
new file mode 100644
index 0000000..2da1793
--- /dev/null
+++ b/XML_RPC.ttcn
@@ -0,0 +1,189 @@
+/*******************************************************************************
+* Copyright (c) 2000-2018 Ericsson Telecom AB
+*
+* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B                       
+*
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*******************************************************************************/
+//
+//  File:          XML_RPC.ttcn
+//  Description:
+//  References:
+//  Rev:
+//  Prodnr:
+//  Updated:       Thu Aug  2 13:51:04 2018
+//  Contact:       http://ttcn.ericsson.se
+//
+////////////////////////////////////////////////////////////////////////////////
+//	Generated from file(s):
+//	- XML-RPC.xsd
+//			/* xml version = "1.0" */
+//			/* targetnamespace = "NoTargetNamespace" */
+////////////////////////////////////////////////////////////////////////////////
+//     Modification header(s):
+//-----------------------------------------------------------------------------
+//  Modified by:
+//  Modification date:
+//  Description:
+//  Modification contact:
+//------------------------------------------------------------------------------
+////////////////////////////////////////////////////////////////////////////////
+
+
+module XML_RPC {
+
+
+import from XSD all;
+
+
+external function enc_MethodCall(in MethodCall pdu) return octetstring
+with { extension "prototype (convert) encode(XER:XER_EXTENDED)" }
+
+external function dec_MethodCall(in octetstring stream) return MethodCall
+with { extension "prototype (convert) decode(XER:XER_EXTENDED)" }
+
+
+
+
+external function enc_MethodResponse(in MethodResponse pdu) return octetstring
+with { extension "prototype (convert) encode(XER:XER_EXTENDED)" }
+
+external function dec_MethodResponse(in octetstring stream) return MethodResponse
+with { extension "prototype (convert) decode(XER:XER_EXTENDED)" }
+
+
+
+
+
+
+type record MethodCall
+{
+  record of enumerated {
+    methodName,
+    params
+  } order,
+  XSD.String methodName (pattern "([A-Za-z0-9]|/|.|:|_)*"),
+  record {
+    record of ParamType param_list
+  } params optional
+}
+with {
+  variant "name as uncapitalized";
+  variant "useOrder";
+  variant "element";
+  variant (params.param_list) "untagged";
+  variant (params.param_list[-]) "name as 'param'";
+};
+
+
+type record MethodResponse
+{
+  union {
+    record {
+      ParamType param_
+    } params,
+    /* What can appear inside a fault is very restricted */
+    record {
+      record {
+        record {
+          MemberType member,
+          MemberType member_1
+        } struct
+      } value_
+    } fault
+  } choice
+}
+with {
+  variant "name as uncapitalized";
+  variant "element";
+  variant (choice) "untagged";
+  variant (choice.params.param_) "name as 'param'";
+  variant (choice.fault.value_) "name as 'value'";
+  variant (choice.fault.value_.struct.member_1) "name as 'member'";
+};
+
+
+type record ParamType
+{
+  ValueType value_
+}
+with {
+  variant (value_) "name as 'value'";
+};
+
+
+
+type record ValueType
+{
+  record of XSD.String embed_values,
+  union {
+    XSD.Int i4,
+   // XSD.Int int,
+    ASCIIString string,
+    XSD.Decimal double,
+    XSD.Base64Binary base64,
+    NumericBoolean boolean_,
+    XSD.DateTime dateTime_iso8601,
+    ArrayType array,
+    StructType struct
+  } choice
+}
+with {
+  variant "embedValues";
+  variant (choice) "untagged";
+  variant (choice.base64) "name as capitalized";
+  variant (choice.boolean_) "name as 'boolean'";
+  variant (choice.dateTime_iso8601) "name as 'dateTime.iso8601'";
+};
+
+
+type record StructType
+{
+  record length(1 .. infinity) of MemberType member_list
+}
+with {
+  variant (member_list) "untagged";
+  variant (member_list[-]) "name as 'member'";
+};
+
+
+type record MemberType
+{
+  XSD.String name,
+  ValueType value_
+}
+with {
+  variant (value_) "name as 'value'";
+};
+
+
+type record ArrayType
+{
+  record {
+    record of ValueType value_list
+  } data
+}
+with {
+  variant (data.value_list) "untagged";
+  variant (data.value_list[-]) "name as 'value'";
+};
+
+
+type XSD.String ASCIIString (pattern "([ -~]|\n|\r|\t)*");
+
+
+type XSD.Boolean NumericBoolean;
+//with {
+//variant "text 'true' as '1'";
+//variant "text 'false' as '0'";
+//};
+
+
+}
+with {
+encode "XML";
+variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'";
+}
diff --git a/XML_RPC_test.ttcn b/XML_RPC_test.ttcn
new file mode 100644
index 0000000..faabc38
--- /dev/null
+++ b/XML_RPC_test.ttcn
@@ -0,0 +1,630 @@
+/*******************************************************************************
+* Copyright (c) 2000-2018 Ericsson Telecom AB
+*
+* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B                       
+*
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*******************************************************************************/
+//
+//  File:               XML_RPC_test.ttcn
+//  Description:        XML_RPC encoding-decoding test
+//  Rev:                <RnXnn>
+//  Prodnr:             
+//  Updated:            
+//  Contact:            
+///////////////////////////////////////////////
+module XML_RPC_test {
+
+
+import from XML_RPC  all;
+
+type component Test_CT {
+}
+
+template MethodResponse t_GetVoucherHistoryResponse := {
+  choice := {
+    params := {
+      param_ := {
+        value_ := {
+          embed_values:={"",""},
+          choice := {
+            struct := {
+              member_list := {
+                {
+                  name := "responseCode",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      i4 := 0
+                    }
+                  }
+                },
+                {
+                  name := "agent",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      string := "BZ101"
+                    }
+                  }
+                },
+                {
+                  name := "batchId",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      string := "ABC1234"
+                    }
+                  }
+                },
+                {
+                  name := "currency",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      string := "EUR"
+                    }
+                  }
+                },
+                {
+                  name := "expiryDate",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      dateTime_iso8601 := "2003-07-17T00:00:00"
+                    }
+                  }
+                },
+                {
+                  name := "voucherGroup",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      string := "A1"
+                    }
+                  }
+                },
+                {
+                  name := "state",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      i4 := 2
+                    }
+                  }
+                },
+                {
+                  name := "value",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      string := "10000"
+                    }
+                  }
+                },
+                {
+                  name := "extensionText1",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      string := "VoucherType=1,Market=Europe"
+                    }
+                  }
+                },
+                {
+                  name := "extensionText2",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      string := "19990817T00:00:00"
+                    }
+                  }
+                },
+                {
+                  name := "extensionText3",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      string := "42"
+                    }
+                  }
+                },
+                {
+                  name := "transactionRecords",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice := {
+                      array := {
+                        data := {
+                          value_list := {
+                            {
+                              embed_values:={"",""},
+                              choice := {
+                                struct := {
+                                  member_list :=
+                                  {
+                                    {
+                                      name := "operatorId",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice := {
+
+                                          string := "administrator"
+                                        }
+                                      }
+                                    },
+                                    {
+                                      name := "newState",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice := {
+
+                                          i4 := 5
+                                        }
+                                      }
+                                    },
+                                    {
+                                      name := "timestamp",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice := {
+
+                                          dateTime_iso8601 := "2002-10-09T02:39:55"
+                                        }
+                                      }
+                                    }
+                                  }
+                                }
+                              }
+                            },
+                            {
+                              embed_values:={"",""},
+                              choice := {
+                                struct := {
+                                  member_list :=
+                                  {
+                                    {
+                                      name := "operatorId",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice := {
+
+                                          string := "administrator"
+                                        }
+                                      }
+                                    },
+                                    {
+                                      name := "newState",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice := {
+
+                                          i4 := 0
+                                        }
+                                      }
+                                    },
+                                    {
+                                      name := "timestamp",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice := {
+
+                                          dateTime_iso8601 := "2002-10-10T01:39:54"
+                                        }
+                                      }
+                                    }
+                                  }
+                                }
+                              }}
+                            ,
+                            {
+                              embed_values:={"",""},
+                              choice := {
+
+                                struct := {
+                                  member_list :=
+                                  {
+                                    {
+                                      name := "subscriberId",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice := {
+
+                                          string := "706691616"
+                                        }
+                                      }
+                                    },
+                                    {
+                                      name := "timestamp",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice := {
+
+                                          dateTime_iso8601 := "2002-10-10T01:39:54"
+                                        }
+                                      }
+                                    },
+                                    {
+                                      name := "transactionId",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice := {
+
+                                          string := "123456"
+                                        }
+                                      }
+                                    },
+                                    {
+                                      name := "newState",   // newState put at the end
+                                      value_ := { 
+                                        embed_values:={"",""},
+                                        choice := {
+                                          // to test whether SET OF works
+                                          i4 := 1
+                                        }
+                                      }
+                                    }
+                                  }
+                                }
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+
+template MethodResponse t_GetVoucherHistoryResponse1 := {
+  choice := {
+    params := {
+      param_ := {
+        value_ := {
+          embed_values:={"",""},
+          choice:= {
+            struct := {
+              member_list := {
+                {
+                  name := "responseCode",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice:= {
+                      i4 := 0
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+
+
+template MethodCall t_DeleteTask_SingleParam :=
+{
+  order:={methodName, params},
+  methodName := "DeleteTask",
+  params := {
+    param_list := {{
+        value_ := {
+          embed_values:={"",""},
+          choice := {
+            struct := {
+              member_list := {
+                {
+                  name := "taskId",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice:= {
+
+                      i4 := 44
+                    }
+                  }
+                }}
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+
+template MethodCall/*_MultipleParams */ t_GetGenerateVoucherUsageReportTaskInfo :=
+{   
+  order:={methodName, params},
+  methodName := "GetGenerateVoucherUsageReportTaskInfo",
+  params := {
+    param_list := {
+      {
+        value_ := {
+          embed_values:={"",""},
+          choice := {
+            struct := {
+              member_list := { {
+                  name := "originNodeType",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice:= {
+                      string := "IVR"
+                    }}
+                }}
+            }
+          }
+        }
+      }
+    }
+  }
+
+}
+
+
+template MethodCall t_GeneralUpdate_SingleParam := {
+   order:={methodName, params},
+  methodName := "GeneralUpdate",
+  params := {
+    param_list := { {
+        value_ := {
+          embed_values:={"",""},
+          choice := {
+            struct := {
+              member_list := {
+                {
+                  name := "originNodeType",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice:= {
+                      string := "IVR"
+                    }}
+                },
+                {
+                  name := "originHostName",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice:= {
+                      string := "ws00824"
+                    }}
+                },
+                {
+                  name := "originTransactionID",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice:= {
+                      string := "31349729532086766516"
+                    }}
+                },
+                {
+                  name := "originTimeStamp",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice:= {
+                      dateTime_iso8601 := "2012-02-06T13:19:00"
+                    }
+                  }
+                },
+                {
+                  name := "subscriberNumber",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice:= {
+                      string := "4558024013"
+                    }}
+                },
+                {
+                  name := "transactionCurrency",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice:= {
+                      string := "SEK"
+                    }}
+                },
+                {
+                  name := "offerUpdateInformationList",
+                  value_ := {
+                    embed_values:={"",""},
+                    choice:= {
+                      array := {
+                        data := {
+                          value_list := {
+                            {
+                              embed_values:={"",""},
+                              choice:= {
+                                struct := {
+                                  member_list := {
+                                    {
+                                      name := "offerID",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice:= {
+                                          i4 := 20// int := 20
+                                        }
+                                      }
+                                    },
+                                    {
+                                      name := "startDate",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice:= {
+                                          dateTime_iso8601 := "2012-02-07T12:00:00+00:00"
+                                        }
+                                      }
+                                    },
+                                    {
+                                      name := "expiryDate",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice:= {
+                                          dateTime_iso8601 := "2012-02-10T12:00:00+00:00"
+                                        }
+                                      }
+                                    },
+                                    {
+                                      name := "offerType",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice:= {
+                                          i4 := 0//  int := 0
+                                        }
+                                      }
+                                    },
+                                    {
+                                      name := "dedicatedAccountUpdateInformation",
+                                      value_ := {
+                                        embed_values:={"",""},
+                                        choice:= {
+                                          array := {
+                                            data := {
+                                              value_list := {
+                                                {
+                                                  embed_values:={"",""},
+                                                  choice:= {
+                                                    struct := {
+                                                      member_list := {
+                                                        {
+                                                          name := "dedicatedAccountID",
+                                                          value_ := {
+                                                            embed_values:={"",""},
+                                                            choice:= {
+                                                              i4 := 1//  int := 1
+                                                            }
+                                                          }
+                                                        },
+                                                        {
+                                                          name := "dedicatedAccountValueNew",
+                                                          value_ := {
+                                                            embed_values:={"",""},
+                                                            choice:= {
+                                                              string := "100"
+                                                            }
+                                                          }
+                                                        },
+                                                        {
+                                                          name := "dedicatedAccountUnitType",
+                                                          value_ := {
+                                                            embed_values:={"",""},
+                                                            choice:= {
+                                                              i4 := 1// int := 1
+                                                            }
+                                                          }
+                                                        }
+                                                      }
+                                                    }
+                                                  }
+                                                }
+                                              }
+                                            }
+                                          }
+                                        }
+                                      }
+                                    }
+                                  }
+                                }
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+}
+
+testcase tc_TestEncDec() runs on Test_CT {
+
+log (t_GetVoucherHistoryResponse);
+var MethodResponse pdu := valueof(t_GetVoucherHistoryResponse);
+var octetstring encodedPdu;
+
+encodedPdu := enc_MethodResponse(pdu);
+log(encodedPdu);
+
+
+
+
+log(dec_MethodResponse(encodedPdu))
+
+
+if (match(dec_MethodResponse(encodedPdu), t_GetVoucherHistoryResponse)) {
+setverdict(pass);
+} else {
+setverdict(fail);
+}
+
+
+log (t_DeleteTask_SingleParam);
+var MethodCall pdu2 := valueof(t_DeleteTask_SingleParam);
+
+var octetstring encodedPdu2;
+
+encodedPdu2 := enc_MethodCall(pdu2);
+log(encodedPdu2);
+
+log(dec_MethodCall(encodedPdu2))
+if (match(dec_MethodCall(encodedPdu2), t_DeleteTask_SingleParam)) {
+setverdict(pass);
+} else {
+setverdict(fail);
+}
+
+
+log (t_GetGenerateVoucherUsageReportTaskInfo);
+var MethodCall pdu3 := valueof(t_GetGenerateVoucherUsageReportTaskInfo);
+var octetstring encodedPdu3;
+
+encodedPdu3 := enc_MethodCall(pdu3);
+log(encodedPdu3);
+
+log(dec_MethodCall(encodedPdu3))
+if (match(dec_MethodCall(encodedPdu3), t_GetGenerateVoucherUsageReportTaskInfo)) {
+setverdict(pass);
+} else {
+setverdict(fail);
+}
+
+log (t_GeneralUpdate_SingleParam );
+var MethodCall pdu4 := valueof(t_GeneralUpdate_SingleParam );
+
+var octetstring encodedPdu4;
+
+encodedPdu4 := enc_MethodCall(pdu4);
+log(encodedPdu4);
+
+log(dec_MethodCall(encodedPdu4))
+if (match(dec_MethodCall(encodedPdu4), t_GeneralUpdate_SingleParam )) {
+setverdict(pass);
+} else {
+setverdict(fail);
+}
+
+}
+
+
+control {
+    execute(tc_TestEncDec())
+}
+
+}
