function buySection (
        uint _section_index,
        uint _image_id,
        string _md5
    ) payable {
        if (_section_index >= sections.length) throw;
        Section section = sections[_section_index];
        if(!section.for_sale && section.initial_purchase_done)
        {
            
            throw;
        }
        
        
        if(section.initial_purchase_done)
        {
            
            if(msg.value < section.price)
            {
                
                throw;
            } else
            {
                
                
                if (section.price != 0)
                {
                    uint fee = section.price / 100;
                    
                    ethBalance[owner] += fee;
                    
                    ethBalance[section.owner] += (msg.value - fee);
                }
                
                
                ethBalance[msg.sender] += (msg.value - section.price);
                
                balanceOf[section.owner]--;
                
                balanceOf[msg.sender]++;
            }
        } else
        {
            
            if(msg.value < ipo_price)
            {
                
                throw;
            } else
            {
                
                ethBalance[owner] += msg.value;
                
                
                ethBalance[msg.sender] += (msg.value - ipo_price);
                
                pool--;
                
                balanceOf[msg.sender]++;
            }
        }
        
        
        section.owner = msg.sender;
        section.md5 = _md5;
        section.image_id = _image_id;
        section.last_update = block.timestamp;
        section.for_sale = false;
        section.initial_purchase_done = true; 
    }