How to make a bannister for a spiral staircase? Let's say you have a shape that would act as one stair step:



Then you add an empty and both the object and the empty have the same origin point. Then you add an array modifier to the stair step, and manipulate the empty to make a spiral staircase.



How would anybody make a railing surrounding the staircase?



When subdivision surface is used, the fence not to be straight from step to step, but round.
Here is what I mean:
Not this - 

But this - 

Edit: The merge option in the array modifier doesn't seem to do a good job


Does anybody knows how can I make a fence that follows the spiral in a perfect alignment with the spiral that follow the stairs and at the same time every part of it to be connected so that when subdivision surface is added to it, the fence to be rounded, like the representation in the 5th image from above?

Edit: I did it as Gandalf3 explained, but I'm having a problem.


What is that line that is visible when subdivision surface is added and how to fix it?
Note: I was having trouble with vertex groups so I duplicated the model and on the duplicate I applied the array so I could use it as a guide to align the vertecies of the end of the cylindar to the begining of the second one ("cursor to selected"-"selection to cursor"). And I edded a hook modifier and made the "Object" to be the "Empty" and on "Vertex groups" I added the vertex group. And I'm not sure if they are now connected. And I didn't parent the empty to the other empty. But they should be connected now right? Here is the blend file if someone would like to check it out - 

http://www.pasteall.org/blend/29776

Its my first upload file so inform me if it can't opened.
One way is to just add some cylinders to your stair object:




Add the cylinder meshes while in edit mode with the stair object selected.
Line up the geometry on the end of each cylinder (snapping is useful here, as it leaves no doubt about which vertex should be merged with what):



What I did in the gif:


Note the Z rotation of the array empty (this is only needed for the initial setup, it will be done automatically later), then enter edit mode and rotate the end to the cylinder the same amount (in my case, ~3.1)
Enable apply modifier to edit cage on the array modifier (inverted triangle icon).
Ensure the snapping type is set to Vertex and Self snapping is enabled in 3D view > Header.
Select any part of the horizontal cylinder, then press CtrlL (select linked) CtrlI (Invert selection) H (Hide selection) to get a clearer view and make snapping easier.
With the rotated end of the horizontal cylinder selected, press G and then hold Ctrl with your mouse cursor over the other end of the cylinder in the next array element.

Now enable Merge in the array modifier to merge those vertices together, resulting in a sub-serfable railing: 


By using hooks parented to the main empty, you can keep the merged parts in the right locations, no matter where you move the main empty:



To do this, select the end of the horizontal railing cylinder and press CtrlH> Hook to new object. This will automatically add a vertex group, an empty, and a hook modifier. The hook modifier will bind the location of the vertices in the vertex group to the location of the empty.
Parent the newly created hook empty to the empty controlling the array (CtrlP> Object).


Repeat the hook+parent for the bottom edge loop of the central column.


See this example .blend to explore it yourself :)