コメント
Check parameters.
Make a deep copy for the parameter.
Move codes.
Clean up.
Use default nil instead of Symbol.