[xsl] Plain Text Handling in XSLT Output

i bother with the handling of plain text in xslt. My problem is that i
have to insert plain text combined with values to the output depending
on if a node exists or not (which is a very common task i guess). So
there are many xsl:if test=exists(...) statements inside my xslt.

1. Prob: White spaces
If i have a xslt like this:
...
<xsl:value-of select="Firstname"/> <xsl:value-of select="Lastname"/>
...
I always get this output:
...
FirstnameLastname
...
How do i insert a white space between (these) two values?

2. Prob: Line Feed & Carriage Return
The xslt:
...
<person>
<xsl:if test="exists(mds:node17)">
<name>
<xsl:value-of select="node17"/>
<xsl:if test="exists(node18)">
(<xsl:value-of select="node18"/>)
</xsl:if>
</name>
</xsl:if>
</person>
...
This is the expected output:
...
Lastname (Function)
...
But this is the real output:
...
Lastname
(Function)
...
How can i control if a linefeed is added or not? Is there a possibilty
to remove or add a linefeed with xslt to the output?