diff --git a/activity.hpp b/activity.hpp
index 6c585657060929277b009b1ba3fa6bf6476d5b4d..751916a757d10618cc175b6d85a1c5c46e3587b5 100644
--- a/activity.hpp
+++ b/activity.hpp
@@ -35,9 +35,13 @@ namespace CIS {
         // All `Name` should not contain QuotationMark(")
         Activity(string displayName, string className, string entityName = "")
             : displayName(Utility::HtmlEscapeString(displayName)), className(className), entityName(entityName), taskId(Utility::GenUUID()) {}
+        Activity(const Activity &another)
+            : displayName(another.displayName), className(another.className), entityName(another.entityName), taskId(Utility::GenUUID()), inputSettings(another.inputSettings) {}
+        Activity(Activity &&) = default;
         
-        void addInputSetting(string k, string v) {
+        Activity &addInputSetting(string k, string v) {
             inputSettings[k] = v;
+            return *this;
         }
         void explicitSetRawArgument(string argTypeInXaml, string argValueInCSharp) {
             throw std::runtime_error("NotSupported! Activity seems doesn't support custom type inputSettings at all. Refer to commit 7fd539d6d5f6b102337da9591217b781cb71ced9 if we get new info and want to support it again. ");