<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -135,34 +135,43 @@ module Icalendar
         if key =~ /ip_.*/
           key = key[3..-1]
         end
+        
+        prelude = &quot;#{key.gsub(/_/, '-').upcase}&quot; 
 
         # Property name
-        unless multiline_property?(key)
-           prelude = &quot;#{key.gsub(/_/, '-').upcase}&quot; + 
-
-           # Possible parameters
-           print_parameters(val) 
-
-           # Property value
-           value = &quot;:#{val.to_ical}&quot; 
-           escaped = prelude + value.gsub(&quot;\\&quot;, &quot;\\\\&quot;).gsub(&quot;\n&quot;, &quot;\\n&quot;).gsub(&quot;,&quot;, &quot;\\,&quot;).gsub(&quot;;&quot;, &quot;\\;&quot;)
-           s &lt;&lt; escaped.slice!(0, MAX_LINE_LENGTH) &lt;&lt; &quot;\r\n &quot; while escaped.size &gt; MAX_LINE_LENGTH
-           s &lt;&lt; escaped &lt;&lt; &quot;\r\n&quot;
-           s.gsub!(/ *$/, '')
+        s &lt;&lt; if multiline_property?(key)
+          val.inject('') do |res, v|
+            res &lt;&lt; print_value(v, prelude)
+          end
+         elsif multi_property?(key)
+           prelude + ':' + print_parameters(val) + val.map do |v|
+             escape(v.to_ical)
+           end.join('\,') &lt;&lt; &quot;\r\n&quot;
          else 
-           prelude = &quot;#{key.gsub(/_/, '-').upcase}&quot; 
-            val.each do |v| 
-               params = print_parameters(v)
-               value = &quot;:#{v.to_ical}&quot;
-               escaped = prelude + params + value.gsub(&quot;\\&quot;, &quot;\\\\&quot;).gsub(&quot;\n&quot;, &quot;\\n&quot;).gsub(&quot;,&quot;, &quot;\\,&quot;).gsub(&quot;;&quot;, &quot;\\;&quot;)
-               s &lt;&lt; escaped.slice!(0, MAX_LINE_LENGTH) &lt;&lt; &quot;\r\n &quot; while escaped.size &gt; MAX_LINE_LENGTH
-               s &lt;&lt; escaped &lt;&lt; &quot;\r\n&quot;
-               s.gsub!(/ *$/, '')
-            end
+            print_value val, prelude
          end
       end
       s
     end
+    
+    def print_value(value, prelude)
+      s = ''
+      params = print_parameters(value) 
+      value = value.to_ical
+      escaped = prelude + params + ':' &lt;&lt; escape(value)
+      s &lt;&lt; escaped.slice!(0, MAX_LINE_LENGTH) &lt;&lt; &quot;\r\n &quot; while escaped.size &gt; MAX_LINE_LENGTH
+      s &lt;&lt; escaped &lt;&lt; &quot;\r\n&quot;
+      s.gsub!(/ *$/, '')
+    end
+    
+    def escape(value)
+      if value.respond_to?(:no_escape) &amp;&amp; value.no_escape
+        value
+      else
+        value.gsub(&quot;\\&quot;, &quot;\\\\&quot;).gsub(&quot;\n&quot;, &quot;\\n&quot;).gsub(&quot;,&quot;, &quot;\\,&quot;).gsub(&quot;;&quot;, &quot;\\;&quot;)
+      end
+    end
+    
 
     # Print the parameters for a specific property
     def print_parameters(val)</diff>
      <filename>lib/icalendar/component.rb</filename>
    </modified>
    <modified>
      <diff>@@ -44,6 +44,18 @@ class Array
   end
 end
 
+class Hash
+  def to_ical
+    string = map do |key, value|
+      key.to_s + '=' + value.to_s
+    end.join(';')
+    def string.no_escape
+      true
+    end
+    string
+  end
+end
+
 module URI
   class Generic
     def to_ical</diff>
      <filename>lib/icalendar/conversions.rb</filename>
    </modified>
    <modified>
      <diff>@@ -94,4 +94,12 @@ EOS
     assert_equal(folded, @cal.to_ical)
   end
   
+  def test_multi_properties_with_params
+    @cal.event do
+      add_recurrence_rule({'FREQ' =&gt; 'YEARLY', 'BYMONTH' =&gt; '10', 'BYDAY' =&gt; '-1SU'})
+    end
+    
+    assert @cal.to_ical.include?('RRULE:BYMONTH=10;FREQ=YEARLY;BYDAY=-1SU'), @cal.to_ical &lt;&lt; 'does not include ' &lt;&lt; 'RRULE:BYMONTH=10;FREQ=YEARLY;BYDAY=-1SU'
+  end
+  
 end</diff>
      <filename>test/conversions_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ba983b1918847d941896b359ccda567f97b3fec2</id>
    </parent>
  </parents>
  <author>
    <name>Alexander Lang</name>
    <email>alex@skywalker.local</email>
  </author>
  <url>http://github.com/langalex/icalendar/commit/2de83eebd3e74a733f88cedbbb80bad0f17dc7d7</url>
  <id>2de83eebd3e74a733f88cedbbb80bad0f17dc7d7</id>
  <committed-date>2008-09-11T03:28:36-07:00</committed-date>
  <authored-date>2008-09-11T03:28:36-07:00</authored-date>
  <message>made recurrence_rules working,

using add_recurrence_rule('FREQ' =&gt; 'DAILY', 'INTERVAL' =&gt; 1, 'COUNT' =&gt; 10) will generate a line
RRULE:COUNT=10;INTERVAL=1;FREQ=DAILY</message>
  <tree>7a0002ea5290b0379b37a1755e323a270b5123fa</tree>
  <committer>
    <name>Alexander Lang</name>
    <email>alex@skywalker.local</email>
  </committer>
</commit>
