function SWEP:NetworkWeapon(sendto)
    net.Start("TacRP_networkweapon")
    net.WriteUInt(self:EntIndex(), 13)

    for slot, slottbl in pairs(self.Attachments) do
        if !slottbl.Installed then net.WriteUInt(0, TacRP.Attachments_Bits) continue end

        local atttbl = TacRP.GetAttTable(slottbl.Installed)

        net.WriteUInt(atttbl.ID, TacRP.Attachments_Bits)
    end

    if sendto then
        net.Send(sendto)
    else
        net.SendPVS(self:GetPos())
    end

    self:InvalidateCache()

    self:DoBodygroups(true)
    self:DoBodygroups(false)
end

function SWEP:ReceivePreset()
    for slot, slottbl in pairs(self.Attachments) do
        local attid = net.ReadUInt(TacRP.Attachments_Bits)

        if attid == 0 then
            if slottbl.Installed then
                self:Detach(slot, true)
            end
        else
            local att = TacRP.Attachments_Index[attid]
            local atttbl = TacRP.GetAttTable(att)

            if !atttbl then continue end

            if slottbl.Installed then
                self:Detach(slot, true)
            end

            self:Attach(slot, att, true, true)

            if atttbl.OnPresetLoad then
                atttbl.OnPresetLoad(self)
            end
        end
    end

    self:NetworkWeapon()
    TacRP:PlayerSendAttInv(self:GetOwner())

    self:InvalidateCache()
    self:SetBaseSettings()

    if self:GetValue("TryUnholster") then
        self:DoDeployAnimation()
    end

    self:RestoreClip(self.Primary.ClipSize)
end
