anchor.diff:  			return
   		else if(G.use(decrement))
   			AddUses(increment)
  -			user << "<span class='notice'>You insert a piece of glass into the [src.name]. You have [uses] lights remaining.</span>"
  +			user << "<span class='notice'>You insert a piece of glass into the [src.name]. You have [uses] light\s remaining.</span>"
   			return
   		else
   			user << "<span class='warning'>You need one sheet of glass to replace lights!</span>"
   
   	if(istype(W, /obj/item/weapon/light))
  +		var/new_bulbs = 0
   		var/obj/item/weapon/light/L = W
   		if(L.status == 0) // LIGHT OKAY
   			if(uses < max_uses)
   				if(!user.unEquip(W))
   					return
   				AddUses(1)
  -				user << "<span class='notice'>You insert the [L.name] into the [src.name]. You have [uses] lights remaining.</span>"
   				qdel(L)
  +		else
  +			if(!user.unEquip(W))
   				return
  -		else
  -			user << "<span class='warning'>You need a working light!</span>"
  -			return
  +			new_bulbs += AddShards(1)
  +			qdel(L)
  +		if(new_bulbs != 0)
  +			playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
  +		user << "<span class='notice'>You insert the [L.name] into the [src.name]. " + status_string() + "</span>"
  +		return
   
   	if(istype(W, /obj/item/weapon/storage))
   		var/obj/item/weapon/storage/S = W
  -		var/found_good_light = 0
  -		var/replaced_something = 0
  +		var/found_lightbulbs = FALSE
  +		var/replaced_something = TRUE
   
   		for(var/obj/item/I in S.contents)
   			if(istype(I,/obj/item/weapon/light))
   				var/obj/item/weapon/light/L = I
  +				found_lightbulbs = TRUE
  +				if(src.uses >= max_uses)
  +					break
   				if(L.status == LIGHT_OK)
  -					found_good_light = 1
  -					if(src.uses < max_uses)
  -						qdel(L)
  -						AddUses(1)
  -						replaced_something = 1
  -					else
  -						break
  -
  -		if(!found_good_light)
  -			user << "<span class='warning'>\The [S] contains no useable lights!</span>"
  +					replaced_something = TRUE
  +					AddUses(1)
  +					qdel(L)
  +
  +				else if(L.status == LIGHT_BROKEN || L.status == LIGHT_BURNED)
  +					replaced_something = TRUE
  +					AddShards(1)
  +					qdel(L)
  +
  +		if(!found_lightbulbs)
  +			user << "<span class='warning'>\The [S] contains no bulbs.</span>"
   			return
   
   		if(!replaced_something && src.uses == max_uses)
   			user << "<span class='warning'>\The [src] is full!</span>"
   			return
   
  -		user << "<span class='notice'>You fill \the [src] with lights from \the [S]. You have [uses] lights remaining.</span>"
  +		user << "<span class='notice'>You fill \the [src] with lights from \the [S]. " + status_string() + "</span>"
   
   /obj/item/device/lightreplacer/emag_act()
   	if(!emagged)
  
positive.code: 
  // Negative numbers will subtract
  /obj/item/device/lightreplacer/proc/AddUses(amount = 1)
  	uses = min(max(uses + amount, 0), max_uses)
  
  /obj/item/device/lightreplacer/proc/Charge(var/mob/user)
  	charge += 1
  
negative.code: 			U << "<span class='notice'>You replace the [target.fitting] with \the [src].</span>"
  
  			if(target.status != LIGHT_EMPTY)
  				var/new_bulbs = AddShards(1)
  				if(new_bulbs != 0)
  					U << "<span class='notice'>\The [src] has fabricated a new bulb from the broken bulbs it has stored. It now has [uses] uses.</span>"
  					playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
  
  				target.status = LIGHT_EMPTY
  				target.update()
  