diff -pruN nethack-3.4.3/src/allmain.c nethack-3.4.3-patched/src/allmain.c
--- nethack-3.4.3/src/allmain.c	2003-12-08 00:39:13.000000000 +0100
+++ nethack-3.4.3-patched/src/allmain.c	2005-04-26 14:18:43.821127712 +0200
@@ -144,6 +144,38 @@ moveloop()
 		    if(flags.time && !flags.run)
 			flags.botl = 1;
 
+		    if (uleft && uleft->otyp == RIN_COLD && (moves % 20 == 5)){
+			if (Cold_resistance){
+				Your("left ring feels cold.");
+			} else {
+				Your("left ring is freezing!");
+				losehp(d(3,8), "ring of cold", KILLED_BY_AN);
+			}
+		    }
+		    if (uright && uright->otyp == RIN_COLD && (moves % 20 == 15)){
+			if (Cold_resistance){
+				Your("right ring feels cold.");
+			} else {
+				Your("right ring is freezing!");
+				losehp(d(3,8), "ring of cold", KILLED_BY_AN);
+			}
+		    }
+		    if (uleft && uleft->otyp == RIN_HEAT && (moves % 20 == 0)){
+			if (Fire_resistance){
+				Your("left ring feels warm.");
+			} else {
+				Your("left ring is hot!");
+				losehp(d(3,8), "ring of heat", KILLED_BY_AN);
+			}
+		    }
+		    if (uright && uright->otyp == RIN_HEAT && (moves % 20 == 10)){
+			if (Fire_resistance){
+				Your("right ring feels warm.");
+			} else {
+				Your("right ring is hot!");
+				losehp(d(3,8), "ring of heat", KILLED_BY_AN);
+			}
+		    }
 		    /* One possible result of prayer is healing.  Whether or
 		     * not you get healed depends on your current hit points.
 		     * If you are allowed to regenerate during the prayer, the
diff -pruN nethack-3.4.3/src/do.c nethack-3.4.3-patched/src/do.c
--- nethack-3.4.3/src/do.c	2003-12-08 00:39:13.000000000 +0100
+++ nethack-3.4.3-patched/src/do.c	2005-04-26 13:55:37.951811872 +0200
@@ -336,6 +336,20 @@ giveback:
 		/* Not the same as aggravate monster; besides, it's obvious. */
 		pline("Several flies buzz around the sink.");
 		break;
+	    case RIN_HEAT:
+		if (Hallucination){
+		    You("are melting into the floor.");
+		} else {
+			pline("The hot water faucets seems to melt.");
+		}
+		break;
+	    case RIN_COLD:
+		if (Hallucination){
+			You("have a feeling that hell freezes over.");
+		} else {
+			pline("The cold water faucet freezes over.");
+		}
+		break;
 	    default:
 		ideed = FALSE;
 		break;
diff -pruN nethack-3.4.3/src/mhitu.c nethack-3.4.3-patched/src/mhitu.c
--- nethack-3.4.3/src/mhitu.c	2003-12-08 00:39:13.000000000 +0100
+++ nethack-3.4.3-patched/src/mhitu.c	2005-04-26 14:34:19.374901920 +0200
@@ -1769,6 +1769,11 @@ gulpmu(mtmp, mattk)	/* monster swallows 
 				tmp = 0;
 			} else You("are freezing to death!");
 		    } else tmp = 0;
+		    if ((uleft && uleft->otyp == RIN_HEAT) || (uright && uright->otyp == RIN_HEAT)){
+			    You("get %s!", is_animal(mtmp->data)? "regurgitated" : "expelled");
+			    expels(mtmp, mtmp->data, FALSE);
+		    }
+			    
 		    break;
 		case AD_FIRE:
 		    if(!mtmp->mcan && rn2(2)) {
@@ -1780,6 +1785,10 @@ gulpmu(mtmp, mattk)	/* monster swallows 
 			} else You("are burning to a crisp!");
 			burn_away_slime();
 		    } else tmp = 0;
+		    if ((uleft && uleft->otyp == RIN_COLD) || (uright && uright->otyp == RIN_COLD)){
+			    You("get %s!", is_animal(mtmp->data)? "regurgitated" : "expelled");
+			    expels(mtmp, mtmp->data, FALSE);
+		    }
 		    break;
 		case AD_DISE:
 		    if (!diseasemu(mtmp->data)) tmp = 0;
diff -pruN nethack-3.4.3/src/objects.c nethack-3.4.3-patched/src/objects.c
--- nethack-3.4.3/src/objects.c	2003-12-08 00:39:13.000000000 +0100
+++ nethack-3.4.3-patched/src/objects.c	2005-04-26 13:52:00.639848312 +0200
@@ -496,6 +496,8 @@ BOOTS("levitation boots", "snow boots",
 		OBJ(name,stone), \
 		BITS(0,0,spec,0,mgc,spec,0,0,0,HARDGEM(mohs),0,P_NONE,metal), \
 		power, RING_CLASS, 0, 0, 3, cost, 0, 0, 0, 0, 15, color )
+RING("heat", 0, "hot",			     66, 1, 0, 3, IRON, HI_METAL),
+RING("cold", 0, "cool",			     66, 1, 0, 3, IRON, HI_METAL),
 RING("adornment", ADORNED, "wooden",        100, 1, 1, 2, WOOD, HI_WOOD),
 RING("gain strength", 0, "granite",         150, 1, 1, 7, MINERAL, HI_MINERAL),
 RING("gain constitution", 0, "opal",        150, 1, 1, 7, MINERAL,  HI_MINERAL),
diff -pruN nethack-3.4.3/src/uhitm.c nethack-3.4.3-patched/src/uhitm.c
--- nethack-3.4.3/src/uhitm.c	2003-12-08 00:39:13.000000000 +0100
+++ nethack-3.4.3-patched/src/uhitm.c	2005-04-26 14:27:28.928299288 +0200
@@ -523,6 +523,8 @@ int thrown;
 	boolean silvermsg = FALSE, silverobj = FALSE;
 	boolean valid_weapon_attack = FALSE;
 	boolean unarmed = !uwep && !uarm && !uarms;
+	boolean coldmsg = FALSE;
+	boolean heatmsg = FALSE;
 #ifdef STEED
 	int jousting = 0;
 #endif
@@ -559,6 +561,18 @@ int thrown;
 		    tmp += rnd(20);
 		    silvermsg = TRUE;
 		}
+		if ((uleft && uleft->otyp == RIN_HEAT) || (uright && uright->otyp == RIN_HEAT)){
+			if (!resists_fire(mon)){
+				tmp += rnd(10);
+				heatmsg = TRUE;
+			}
+		}
+		if ((uleft && uleft->otyp == RIN_COLD) || (uright && uright->otyp == RIN_COLD)){
+			if (!resists_cold(mon)){
+				tmp += rnd(10);
+				coldmsg = TRUE;
+			}
+		}
 	    }
 	} else {
 	    Strcpy(saved_oname, cxname(obj));
@@ -1015,6 +1029,12 @@ int thrown;
 			 mon_nam(mon), canseemon(mon) ? exclam(tmp) : ".");
 	}
 
+	if (heatmsg) {
+		pline("Your ring burns %s!", mon_nam(mon));
+	}
+	if (coldmsg) {
+		pline("Your ring freezes %s!", mon_nam(mon));
+	}
 	if (silvermsg) {
 		const char *fmt;
 		char *whom = mon_nam(mon);
diff -pruN nethack-3.4.3/win/share/objects.txt nethack-3.4.3-patched/win/share/objects.txt
--- nethack-3.4.3/win/share/objects.txt	2003-12-08 00:39:14.000000000 +0100
+++ nethack-3.4.3-patched/win/share/objects.txt	2005-04-26 14:51:37.196129112 +0200
@@ -2902,6 +2902,44 @@ P = (108, 145, 182)
   MMMAMAMAMAMAMAMM
   MMMMMMMMMMMMMMMM
 }
+# tile 152 (hot / heat)
+{
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMPPPPPMMMMMM
+  MMMMPPAAAPPMMMMM
+  MMMMPAMMMMPAMMMM
+  MMMMPAMMMMPAMMMM
+  MMMMPPAMMPPAMMMM
+  MMMMMPPPPPAAMMMM
+  MMMMMMAAAAAMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+}
+# tile 153 (cool / cold)
+{
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMPPPPPMMMMMM
+  MMMMPPAAAPPMMMMM
+  MMMMPAMMMMPAMMMM
+  MMMMPAMMMMPAMMMM
+  MMMMPPAMMPPAMMMM
+  MMMMMPPPPPAAMMMM
+  MMMMMMAAAAAMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+}
 # tile 152 (wooden / adornment)
 {
   MMMMMMMMMMMMMMMM
