diff --git a/lib/ipaddress/ipv4.rb b/lib/ipaddress/ipv4.rb
index 500531aa9e215ccfacad3e26426c894c58b2ea95..7d8e0d377e9a08ec973bd478b3d6ee56dce96d91 100644
--- a/lib/ipaddress/ipv4.rb
+++ b/lib/ipaddress/ipv4.rb
@@ -286,6 +286,21 @@ module IPAddress;
       @octets[index]
     end
     alias_method :octet, :[]
+
+    #
+    # Updated the octet specified at index
+    #
+    #   ip = IPAddress("172.16.100.50/24")
+    #   ip[2] = 200
+    #
+    #   #=>  #<IPAddress::IPv4:0x00000000000000 @address="172.16.200.1", 
+    #   #=>       @prefix=32, @octets=[172, 16, 200, 1], @u32=2886780929>
+    #
+    def []=(index, value)
+      @octets[index] = value.to_i
+      initialize("#{@octets.join('.')}/#{prefix}")
+    end
+    alias_method :octet=, :[]=
     
     #
     # Returns the address portion of an IP in binary format,
diff --git a/test/ipaddress/ipv4_test.rb b/test/ipaddress/ipv4_test.rb
index 9f92c944150cc8962d1994365a440ac921d3baeb..19264e22c957ee6d072c97b6dc47d659ee84563a 100644
--- a/test/ipaddress/ipv4_test.rb
+++ b/test/ipaddress/ipv4_test.rb
@@ -581,6 +581,20 @@ class IPv4Test < Minitest::Test
     end
   end
 
+  def test_octect_updates
+    ip = @klass.new("10.0.1.15/32")
+    ip[1] = 15
+    assert_equal "10.15.1.15/32", ip.to_string
+
+    ip = @klass.new("172.16.100.1")
+    ip[3] = 200
+    assert_equal "172.16.100.200/32", ip.to_string
+
+    ip = @klass.new("192.168.199.0/24")
+    ip[2] = 200
+    assert_equal "192.168.200.0/24", ip.to_string
+  end
+
 end # class IPv4Test