FreeMind on Linux

From FreeMind
Jump to navigationJump to search
 

Installation (0.8.0)

FreeMind is a Java program, hence you need Java to make it work. There is the "Java runtime engine" (JRE or J2RE) required to run (use, start) FreeMind, and there is the "Java Development Kit" (JDK or J2DK) if you want to compile FreeMind (If you don't know what compile means, then you need only the JRE. In the following lines, I will concentrate on making FreeMind run and the JRE installation).

Once Java has been installed, only then does it make sense to install FreeMind. You can use packages (.deb or .rpm), which is a bit more work to setup but much easier to update, or you can use the more simple installation from a ZIP file (as described in the UN*X section).

The Debian installation

This description should be valid for any Debian based distribution, in particular (K)ubuntu.

Note
FreeMind 0.8.0 is not part of the Debian repository, although FreeMind 0.7.1 is, because of a lot of additional dependencies, and some license issues. For all the gory details, have a look at [1] from the Debian Wiki. We're working on it, but it will take time.

Install Java the Debian way

As Java isn't really free or open, there is no official Debian package for it. The procedure is hence to install java-package from the contrib section, e.g. as root with:

# apt-get install java-package

Read the instructions delivered with the package, and create your own little Java package(s).

In a nutshell, download the Java Runtime Environment (JRE) from Sun (Linux self-extracting file), called something like j2re-1_4_2_10-linux-i586.bin or jre-1_5_0_02-linux-i586.bin. Use the command from the java-package called make-jpkg along with fakeroot as in:

$ fakeroot make-jpkg j2re-1_4_2_10-linux-i586.bin

noting that the filename depends on your version. When you have this, you can install the package as root:

# dpkg -i sun-j2re1.4.deb
Note
The package sun-j2re1.4debian is no longer needed since Sarge has been released.
Note
Sun, together with the communities (or the other way around) has released some "official" Java 1.5 packages. I didn't yet test anything, but you might want to have a try. Check the Debian and Ubuntu package pages (don't install the source file though, but some of the binary ones). You're welcome to report your experience here...

Installing FreeMind under Debian

You can always download the required .deb files from the Files section and install them by hand, using dpkg or whatever, but the comfortable way is to add the following lines to your /etc/apt/sources.list:

   deb http://eric.lavar.de/comp/linux/debian/ <version>/
   deb-src http://eric.lavar.de/comp/linux/debian/ <version>/
Note
you need to replace <version> by either unstable or experimental: I use unstable for software for which I'm pretty sure it will make it into the official Debian repository, experimental for the rest. Currently, only experimental contains interesting things.

Then call as root the two (or three) following commands:

# apt-get update
# apt-get install libbatik-java/testing libjcalendar-java/testing
# apt-get install freemind/experimental freemind-plugins-svg/experimental \
      freemind-plugins-time/experimental freemind-plugins-help/experimental \
      libjgoodies-forms-java/testing

(it's more comfortable because, each time you call "apt-get upgrade", you'll get automatically the new freemind package)

Some additional notes:

  1. with the repository method, you can get as well the sources for the .deb package using "apt-get source freemind[...]".
  2. of course, you're not obliged to install the different plugins.
  3. if you want to use the 'help' plugin, you'll need to download JavaHelp from Sun's Java site and install the jar file as /usr/local/share/java/jhall.jar.
  4. the 2nd line is only required if you're using "sarge" and want to install freemind-plugins-svg (Batik) respectively freemind-plugins-time (JCalendar). For this command to work, you need of course to make sure that the proper repositories have been entered in /etc/apt/sources.list, like in:
   deb http://ftp.XX.debian.org/debian testing main contrib non-free
   deb-src http://ftp.XX.debian.org/debian testing main contrib non-free
Note
XX has to be replaced with the nearest country code (e.g. de for Deutschland, fr for France,...; check the Debian worldwide mirror sites list).
Note
libforms-java has been recently replaced through libjgoodies-forms-java and is now part of Debian etch/testing.

Some notes on (K)Ubuntu

I got my hand on a Kubuntu 5.10 installation, and am now able to give some hints about the specificas of the (K)Ubuntu installation:

  1. you will first need to add the multiverse and universe repositories to your installation, there are plenty of places which explain how to do this.
  2. then, if you're happy with Blackdown's Java 1.4, you don't need to create your own Java package and can install j2re1.4 from the multiverse repository.
  3. sadly, libbatik-java and libjgoodies-forms-java don't seem to be part of any repository; so, you should add the Debian repository as described in the above notes, but be careful to not break your installation with too many pure Debian packages. I personally added the following lines to the file /etc/apt/preferences:
   Package: *
   Pin: release o=Debian
   Pin-Priority: 200


You milleage may vary but if this doesn't work, consider looking at this link http://blog.siliconchaos.net/articles/2006/05/22/setting-up-freemind-in-ubuntu-dapper

i may add that i couldn't install the last svg plugin due to dependencies errors

The RPM installation

Starting with version 0.8.0 of FreeMind, I've started to orient my packaging work towards JPackage compatibility, so that the same packages should work for all distributions with JPackage's packages, especially SuSE 9.x and 10.x, Mandrake/Mandriva 10.x, as well as Fedora Core.

Install Java the JPackage way

FreeMind only works with Sun's or Blackdown's Java.

Taking the example of Sun's Java, there are three possibilities to install Java:

  1. It already does come with your distribution, fine, nothing to do, but make sure it's really Sun's Java by checking the output of java -version.
  2. Install java-1.4.2-sun-compat or java-1.5.0-sun-compat on top of Sun's JDK
  3. Download java-1.4.2-sun or java-1.5.0-sun, build them and install the created packages.

Install JavaHelp2 the JPackage way

If you want to install freemind-plugins-help, you'll need to install JavaHelp2. For licensing reasons, JavaHelp2 can't be redistributed by OpenSource distributions, hence you'll need to build the package yourself:

  1. download
  2. build
  3. and install the created RPM file.

Install FreeMind with RPM, the stupid and easy way ;-)

Install Sun's or Blackdown's Java the JPackage way.

Install JavaHelp2 the JPackage way if you need freemind-plugins-java.

Download all the RPMs from the Files section (don't forget jcalendar and jgoodies-forms) in a directory. Install all these RPMs using the rpm command, e.g.:

# rpm -ivh freemind*.rpm jcalendar*.rpm jgoodies-forms*.rpm

For each missing dependency, go to the JPackage site, search and download the package(s) using the same kind of rpm command. Here is a list of dependencies:

  • freemind: jakarta-commons-lang, relaxngDatatype, msv-xsdlib, jgoodies-forms, xml-commons-apis, ws-jaxme, jakarta-commons-codec
  • freemind-plugins-svg: batik, rhino, xerces-j2, xml-commons-apis
  • freemind-plugins-help: javahelp2
  • freemind-plugins-time: jcalendar >= 1.2.2
Note
search for "msv" in order to find "msv-xsdlib". All the FreeMind RPM sources can be downloaded from [2].

Install FreeMind using apt4rpm

method tested with SuSE 9.2

It sounds easy but actually the first step can be a bit tricky: you first need to setup apt4rpm, as described following the links given in this Jpackage Repository page. The good news is that always more distribution are coming standard with apt on board (if you are able to call apt-get as root, you already have it).

Add the JPackage repository to your /etc/apt/sources.list file as described in the same above page. Add also the two following lines (the 2nd one is optional, for sources) to the same file:

   rpm http://eric.lavar.de/comp/linux/rpm noarch java
   rpm-src http://eric.lavar.de/comp/linux/rpm noarch java

Then call as root the two following commands:

# apt-get update
# apt-get install freemind freemind-plugins-svg freemind-plugins-time freemind-plugins-time

(it's more comfortable because, each time you call "apt-get upgrade", you'll get automatically the new freemind package)

Some additional notes:

  1. with the repository method, you can get as well the sources for the .rpm package using "apt-get source freemind[...]".
  2. of course, you're not obliged to install the different plugins.

Install FreeMind using urpmi

method tested with Mandriva 2006

Use Easy Urpmi to setup a first set of urpmi repositories. Then add the JPackage repositories. See JPackage Project Repositories for details, but in a nutshell:

# urpmi.addmedia jpackage-1.6-generic MIRROR/1.6/generic/free with hdlist.cz
# urpmi.addmedia jpackage-1.6-generic-non-free MIRROR/1.6/generic/non-free with hdlist.cz

Install Sun's or Blackdown's Java the JPackage way.

Install JavaHelp2 the JPackage way if you need freemind-plugins-help.

Add FreeMind's repository:

# urpmi.addmedia freemind http://eric.lavar.de/comp/linux/rpm/noarch/

And then install FreeMind and its plugins:

# urpmi freemind freemind-plugins-svg freemind-plugins-time freemind-plugins-help

The Gentoo installation

Install Java the Gentoo way

Basically, simply do the following:

# emerge -av virtual/jdk

See the Gentoo Java Guide for more information and further instructions.

Install FreeMind the Gentoo way

To ensure you are up-to-date in portage:

# emerge sync (or emerge-websync)

The latest version of FreeMind in Portage may be masked. To use this "unstable" version you may have to unmask the package.

To make sure you know what is going to install, use the --ask flag to emerge. Answer `yes' if you want to emerge dependencies:

# emerge --ask app-misc/freemind

On any UN*X kind of system (also Linux)

Install Java on UN*X

It doesn't really matter, just install some Java from Sun or Blackdown. Download the Java Runtime Environment (JRE) from Sun (Linux self-extracting file), called something like j2re-1_4_2_07-linux-i586.bin or jre-1_5_0_02-linux-i586.bin, or from Blackdown.

Before doing anything though, check to see if a usable Java is already on the system. Any Solaris (version 9 or newer) has one, for example.

Install FreeMind on UN*X

straight-forward installation method

Download the file called something like freemind-bin-max-0_8_0.zip (or freemind-bin-0_8_0.zip if you don't need the plugins), create somewhere a sub-directory and unpack there the file (as normal user or root, depending where you created the sub-directory):

$ unzip .../freemind-bin-max-0_8_0.zip
$ chmod +x freemind.sh

You're done, on any system where /bin/sh is a POSIX-compliant shell. That's true on most Linux systems, but not on Solaris. On Solaris, edit the first line of freemind.sh and change /bin/sh to /bin/bash. Now you're done.

more subtile installation method

Considering you're installing FreeMind locally, you should get root and do the following:

# mkdir -p /usr/local/share/freemind
# unzip freemind*.zip -d /usr/local/share/freemind
# chmod +x /usr/local/share/freemind/freemind.sh
# ln -s /usr/local/share/freemind/freemind.sh /usr/local/bin/freemind

This will copy the contents of the zip file to /usr/local/share/freemind and create a symbolic link to the FreeMind script in the /usr/local/bin directory.

Starting FreeMind

Installed from RPM or DEB package

Just type "freemind" in a console or an Alt+F2 command line, you're normally done. There should also be a menu entry under "Applications" in KDE and GNOME (under Debian, in any window manager).


Installed from ZIP file

You'll need to use a console, or the Alt+F2, or create your own menu entry, using one of the following commands:

       $ /some/directory/path/freemind.sh
  • if you've used the #more_subtile_installation_method, and assuming /usr/local/bin is in your PATH variable, you can use a simple freemind command, as if installed from a package.

Frequently and less frequently Asked Questions

I can't paste branches copied from FreeMind into other applications

Try to use the middle mouse button to paste the content copied from FreeMind.

Under KDE, you can use klipper and set the option "Synchronize contents of the clipboard and the selection", so that you can also use Ctrl+V or Shift+Ins to paste.

I want to add an icon for my Link to FreeMind on my Desktop. Is there one?

The icon is compressed inside the freemind.jar file you can find in the FreeMind installation directory, e.g. /usr/(local/)share/freemind. Once the file located, use a command similar to:

$ unzip $FREEMIND_BASE_DIR/lib/freemind.jar \*/FreeMindWindowIcon.png -d /tmp

This will create a folder images in the tmp directory containing the FreeMindWindowIcon.png file - your icon!

When starting FreeMind, it says "java: command not found". What's wrong?

It's a problem from Fedora Core, Mandrake and the Java Sun RPM, which neither add the java command to the PATH nor defines properly the variable JAVA_HOME.

Add the following two lines to one of the startup scripts (/etc/profile and/or /etc/bash.bashrc for all users, or $HOME/.profile and/or $HOME/.bashrc only for you):

   export PATH=$PATH:/usr/java/j2re1.4.2_04/bin
   export JAVA_HOME=/usr/java/j2re1.4.2_04

(the part in italic depends on your installation)

Note
if you've installed FreeMind from a package, you can alternatively use the solution under #How_can_I_make_FreeMind_use_a_specific_Java_Virtual_Machine.3F.

Why do I get a "No print service found" whenever I attempt to print?

At least up to version 1.4, the java runtime under Linux is using the BSD printing system (also known as the lp commands, or old lp). Most modern distributions offer the CUPS printing system, which needs a compatibility layer to work with Java:

  • Under SuSE 8.2, the package required is called cups-client
  • Under Debian, it's called cupsys-bsd.

Install this package and you should be able to print from FreeMind.

If CUPS is not installed on your system, it is easier to install the traditional lpr/lpd system. On Debian, the package is just lpr, apt-get install lpr should be enough.

Sun's Java 1.5 supports CUPS out of the box. If, however, printing still doesn't work it may be because the CUPS printer names contain '-' characters. There's a Java bug that prevents this from working properly [3], and it doesn't seem fully fixed yet (build 1.5.0_06-b05). Work-arounds are:

  1. Rename printers, e.g. from "my-printer" to "myprinter".
  2. Network printer: Add a local CUPS network printer with a simple name without '-'s in it and use the CUPS URI reported by lpstat -v for the printer you want.
  3. After executing "$ls -l /usr/lib/libcups.so" if there exists a link as "/usr/lib/libcups.so -> libcups.so.2" , try with removing the link by hand.

Small test code to regenerate the error fast: DummyPrinter.java

import java.awt.print.PrinterJob;

class DummyPrinter {
   public static void main(String[] args) {
       try {
           PrinterJob printJob=PrinterJob.getPrinterJob();
           printJob.printDialog();
           System.exit(0);
       } catch( Exception e) {
           e.printStackTrace();
       }
   }
}

I get an error java.lang.NoClassDefFoundError or java.lang.NullPointerException when starting FreeMind

When trying to start FreeMind from a console, you get the following error messages and FreeMind doesn't start:

./lib/freemind.jar 
java.lang.NoClassDefFoundError: javax/swing/JFrame 
at java.lang.ClassLoader.defineClass0 (ClassLoader.java) 
at java.lang.ClassLoader.defineClass (ClassLoader.java:179) 
at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:33) 
at kaffe.lang.AppClassLoader$JarSource.findClass (AppClassLoader.java:143) 
at kaffe.lang.AppClassLoader.findClass (AppClassLoader.java:291) 
at java.lang.ClassLoader.loadClass (ClassLoader.java:142) 
at java.lang.ClassLoader.loadClass (ClassLoader.java:121) 
at kaffe.jar.ExecJarName.main (ExecJarName.java:55) 
at kaffe.jar.ExecJar.main (ExecJar.java:75)

or

update UI not overwritten in class: 
javax.swing.JLayeredPane[0,0,0x0,invalid,translucent,alignmentX=0.0,alignmentY=0.0,border=,
maximumSize=java.awt.Dimension[width=2147483647,height=2147483647],minimumSize=java.awt.Dimension
[width=0,height=0],preferredSize=java.awt.Dimension[width=0,height=0]] 
[Freemind-Developer-Internal-Warning (do not write a bug report, please)]:
                                           Tried to get view without being able to get map module. 
Exception during event dispatch: 
java.lang.NullPointerException 
at javax.swing.plaf.basic.BasicComboBoxEditor.setItem(java.lang.Object) (/usr/lib/libgcj.so.6.0.0) 

This is because you use kaffe (the same applies to libgcj, sablevm and a few others), which doesn't offer all features of Sun's Java. Blackdown's Java do es as well work, I would have doubts on any other implementation (beside perhaps IBM's one). So, remove this Java version and install a version from Sun or Blackdown.

Note
if you've installed FreeMind from a package, you can alternatively use the solution under #How_can_I_make_FreeMind_use_a_specific_Java_Virtual_Machine.3F.


While installing a FreeMind package, it complains Java isn't installed, though I've installed it and Java programs do work

You've probably installed Java manually, and not from an RPM resp. DEB package. This means that the FreeMind RPM resp. DEB package can't know that Java is installed.

Three solutions (from better to worse):

  • Install Java from an RPM or DEB package and retry to install the FreeMind package.
  • Install FreeMind using the ZIP file.
  • Install the FreeMind package by ignoring the missing dependencies, e.g.:
   # rpm -Uvh -nodeps freemind....noarch.rpm


While installing a FreeMind RPM package, it complains Java isn't installed, though I've installed it from an RPM package

You've probably installed the JDK package from Sun, which provides also a JRE but doesn't say it. Your best chance is to install the dummy package j2sdk-provides-j2re-1.4.2-2.noarch.rpm. The source package is available as well.


How can I make FreeMind use a specific Java Virtual Machine?

If you've installed FreeMind from a package, you can make it use a different Java virtual machines than other programs by adding lines similar to the 2 following ones to /etc/freemind/freemindrc, for all users, or to $HOME/.freemind/freemindrc, for you, so that only FreeMind is impacted (and no other program):

   export PATH=$PATH:/usr/java/j2re1.4.2_04/bin
   export JAVA_HOME=/usr/java/j2re1.4.2_04

(the part in italic depends on your installation)


Why doesn't the rebuild of the SRPM work under Fedora Core 2

During rebuild of the RPM, lines similar to the following do appear and the build fails:

compile:
   [mkdir] Created dir: /usr/src/redhat/BUILD/freemind-0.7.1/bin/classes
   [javac] Compiling 92 source files to /usr/src/redhat/BUILD/freemind-0.7.1/bin/classes
   [javac] /usr/src/redhat/BUILD/freemind-0.7.1/freemind/freemind/modes/MindMapLinkRegistry.java:38:
                                                                    error: '{' expected.
   [javac]        };
   [javac]         ^
   [javac] /usr/src/redhat/BUILD/freemind-0.7.1/freemind/freemind/modes/MindMapLinkRegistry.java:40:
                                                                                  error:
Public interface `freemind.modes.ID_Blank' must be defined in a file called `ID_Blank.java'.
   [javac]        public interface ID_Blank extends ID_BasicState {};
   [javac]                         ^

The ant package delivered with Fedora Core 2 seems to be broken (version is 1.5.2, but my ant version is 1.5.1 and it works). Installing ant (and dependencies) from the JPackage Project seems to solve the problem.

Under Fedora Core 3, Java complains in libawt.so about missing libXp.so.6

The exact error message is:

Exception in thread "main" java.lang.UnsatisfiedLinkError:
/usr/lib/jre/lib/i386/libawt.so: libXp.so.6:
cannot open shared object file: No such file or directory

In this case install the package xorg-x11-deprecated-libs-6.8.1-12.i386.rpm, e.g. using yum, this should solve the problem.

FreeMind seems broken and I have the Gtk Look&Feel

We already had quite a lot of issues with the Gtk Look&Feel, sometimes in aspects nobody would have thought relevant to the Look&Feel (e.g. hangs on file system access). Hence we strongly recommend to change your Look&Feel to something else before even trying to pin down the issue.

To do this, edit the file ~/.freemind/user.properties to uncomment and modify the lookandfeel parameter, as in:

lookandfeel = metal

Instead of metal, other valid values are nothing (for no Look&Feel at all), default (the... default one), windows or motif; mainly a matter of taste.

And, yes, we know, Gtk looks sooo much better! (but we don't really care)

Troubleshooting

Most people seem to think that, because you're relatively knowledgeable, they can tell you that something doesn't work, and you will be able to find out the solution, just like this!

Well, that's not exactly like this: first, I need to understand what the problem exactly is, and then I can try to solve it, especially if I've already seen and solved the problem. Think about your mechanic at the garage, if you give him a call and tell him "my car doesn't start" or "something is wrong with my car", would you expect him to tell you right away "Oh, yes, that's the plugs!". Most probably, he will ask to come by. Well, that's exactly the same here, I can't ask you to come by, but if you want good help, you'll need to give good information.

It's easier than you might thought, just do the following steps, that should give us a good start:

  • start a console, e.g. use Alt+F2, and type xterm or konsole or rxvt.
  • in the console, type the following statements:

On an RPM based system:

       DEBUG=1 freemind
       (quit freemind)
       /usr/bin/java -version
       rpm -qa | grep -i j
       rpm -qa | grep freemind
       env | grep -i j

On a Debian based system

       DEBUG=1 freemind
       (quit freemind)
       /usr/bin/java -version
       dpkg -l \*j\*
       dpkg -l freemind\*
       env | grep -i j
Note
You should see which java command is used, e.g. "/usr/bin/java", from the debug output of the freemind command.

The result should look somewhat like this (error messages are OK, I like error messages!):

alice@wonderland:~> DEBUG=1 freemind
DEBUG:   Freemind parameters are .
DEBUG:   Using $PATH to find java virtual machine.
DEBUG:   Using '/usr/bin/java' as java virtual machine...
DEBUG:   Freemind Directory is '/usr/share/freemind'.

Looking for user properties:
/home/ericl/.freemind/user.properties

User properties not found. It will be automatically created.
Done.
Default (System) Look & Feel: javax.swing.plaf.metal.MetalLookAndFeel
[Freemind-Developer-Internal-Warning (do not write a bug report, please)]:
                   Tried to get view without being able to get map module.

alice@wonderland:~> /usr/bin/java -version
java version "1.4.2-rc1"
Java(TM) 2 Runtime Environment, Standard Edition (build Blackdown-1.4.2-rc1)
Java HotSpot(TM) Client VM (build Blackdown-1.4.2-rc1, mixed mode)
alice@wonderland:~> rpm -qa | grep -i j
eject-2.0.13-26
joystick-2002.10.30-38
libjpeg-6.2.0-530
joe-2.9.8-179
jfsutils-1.1.1-25
jpilot-devel-0.99.6-0.pm.1
jpeg-6b-530
jhead-2.0-2
taskjuggler-1.4.2-10
j2sdk-provides-j2re-1.4.2-2
libjasper-1.600.0-75
jpilot-0.99.6-0.pm.1
jakarta-ant-1.5.1-37
java2-1.4.2-0.pm.0
java2-jre-1.4.2-0.pm.0
mjpegtools-1.6.2-1
alice@wonderland:~> rpm -q freemind
freemind-0.7.1-6
alice@wonderland:~> env | grep -i j
JRE_HOME=/usr/lib/java/jre
PATH=/usr/local/bin:/usr/bin:/usr/X11R6/bin:[etc...]
JAVA_BINDIR=/usr/lib/java/bin
JAVA_HOME=/usr/lib/java
SDK_HOME=/usr/lib/java
JDK_HOME=/usr/lib/java
JAVA_ROOT=/usr/lib/java

alice@wonderland:~>
  • open a new thread in the Help Forum of the FreeMind Project,
  • select the commands and what they output,
  • and paste the stuff using the middle button of your mouse in the message body.
  • Explain also your problem of course.
  • Add the name and version of your distribution (SuSE 8.2 or whatever).
  • That should be all.











[l_sp_9] Tankless Heater Water Heater Tankless Water Heater Hot Water Heater Hot Tankless Water Electric Heater Tankless Water Electric Heater Water Heater Solar Water Gas Heater Water Gas Heater Hot Water Bosch Heater Tankless Water Heater Rheem Water Electric Heater Hot Water Bed Heater Water Heater Rinnai Tankless Water Gas Heater Tankless Water Demand Heater Water Heater Richmond Water Heater Services Water Heater State Water Heater Rinnai Water Bosch Heater Water Ao Heater Smith Water Heater Water Whirlpool Bradford Heater Water White Heater Repair Water Electric Heater Hot Tankless Water Gas Heater Hot Tankless Water Dealer Heater Water 40 Electric Gal Heater Water Heater Hot Instant Water American Heater Water Heater O Smith Water Ge Heater Water Heater Hot Solar Water Demand Heater Hot Water Heater Rv Water Heater Paloma Tankless Water Heater Instant Water Heater Paloma Water Heater Propane Water Atwood Heater Water Heater Noritz Water Heater Hot Rheem Water Commercial Heater Water Heater Rheem Tankless Water Heater Noritz Tankless Water Heater Marathon Water Gas Heater Natural Water Heater Review Tankless Water Heater Polaris Water Heater Installation Water Heater Indirect Water Heater Hot Price Water Heater Reliance Water Heat Heater Pump Water Demand Electric Heater Water Heater Part Water Heater Hot Rinnai Water A O Heater Smith Water Heater Tankless Titan Water Heater Lochinvar Water Heater Suburban Water Heater Problem Water Heater Hot Rv Water Gas Heater Natural Tankless Water Heater Renco Tankless Water Heater Takagi Tankless Water Heater Hot Repair Water Heater Hot Rinnai Tankless Water Heater Timer Water Heater Hot Water Whirlpool Heater Point Use Water Bosch Electric Heater Tankless Water Heater Titan Water Electric Heater Powerstar Tankless Water Bradford Heater Hot Water White Heater Select State Water Heater Ruud Water Heater Sears Water Heater Takagi Water Ariston Heater Water Bosch Heater Hot Tankless Water Heater Instantaneous Water Heater Price Water Heater Power Vent Water Heater Install Water Bosch Gas Heater Tankless Water Heater Portable Water Heater Home Mobile Water Build Heater Solar Water Fired Heater Water Wood Drain Heater Water Heater Renai Tankless Water Heater Hot Problem Water Heater Propane Tankless Water Baseboard Heater Hot Water Heater Maintenance Water Heater Review Water Gas Heater Rheem Water Bosch Heater Hot Water