diff --git a/docs/RomanPot.rst b/docs/RomanPot.rst
index cd7d1c414ce26a80c654c7b4305e60603c2fadc8..7fec589812e01f7a14074d29213cf2282cda7c75 100644
--- a/docs/RomanPot.rst
+++ b/docs/RomanPot.rst
@@ -1,7 +1,12 @@
 Roman Pot
 =========
 
-A pair of Roman Pot-style detectors for detection of particles scattered by very small angles.
+A pair of Roman Pot-style detectors for detection of particles scattered by very small angles, typically in forward and far-forward regions.
+
+Generic information about design of Roman pot detectors can be found in references describing units used at LHC `ref 1`_ and `ref 2`_.
+
+.. image:: images/RP.png
+   :width: 400
 
 Example use:
 
@@ -23,6 +28,9 @@ Example use:
 Detector description variables
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+.. image:: images/rp_schem.pdf
+   :width: 400
+
 dimensions
     Dimensions of the sensitive detector.
 
@@ -44,20 +52,23 @@ frame
         thickness of the frame.
 
 position
-Positioning of the whole detector pair relative to the beamline.
+    Positioning of the whole detector pair relative to the beamline.
+
+    z_offset
+        Distance along the beamline.
 
-z_offset
-    Distance along the beamline.
+        rotation
+            Boolean which determines whether the detector pair is horizontal (false) or vertical (true).
+        vmax
+            Furthest distance of the detector from the beam (used to create the full unit unclosure).
+        v
+            Current insertion depth of the detectors (distance of the inner edge relative to the beam axis).
 
-    rotation
-        Boolean which determines whether the detector pair is horizontal (false) or vertical (true).
-    vmax
-        Furthest distance of the detector from the beam (used to create the full unit unclosure).
-    v
-        Current insertion depth of the detectors (distance of the inner edge relative to the beam axis).
+    layer
+        Material stack used for the sensitive detector.
 
-layer
-    Material stack used for the sensitive detector.
+        repeat
+            Number of layers in a single detectors.
 
-    repeat
-        Number of layers in a single detectors.
+.. _ref 1: https://doi.org/10.1016/j.nima.2007.08.034
+.. _ref 2: https://accelconf.web.cern.ch/e06/PAPERS/MOPLS013.PDF
diff --git a/docs/beamline_magnets.rst b/docs/beamline_magnets.rst
new file mode 100644
index 0000000000000000000000000000000000000000..fc0d9e19f2075021d47c85f136fca91e653b80ec
--- /dev/null
+++ b/docs/beamline_magnets.rst
@@ -0,0 +1,62 @@
+Beamline magnet elements
+========================
+
+These detector elements don't directly serve a role in particle detection, but have to be included to accomodate for particle-matter interactions. The provided magnet types are :ref:`dipole <dip>` and :ref:`quadrupole <quad>` magnets and :ref:`spin rotators <snake>`.
+
+.. _dip:
+
+Dipole magnets
+~~~~~~~~~~~~~~
+
+Magnets generating dipole field used for beam steering and spectrometry.
+
+example use:
+
+.. code-block:: XML
+  
+   <detector id="3" name="B0PF_BeamlineMagnet" type="B0pFMag">
+    <placement x="B0PF_XPosition" y="0*m" z="B0PF_CenterPosition" theta="B0PF_RotationAngle" />
+    <dimensions x="B0PF_InnerRadius*4" y="B0PF_InnerRadius*4" z="B0PF_Length*0.5" />
+    <apperture x="B0PF_InnerRadius*2" y="B0PF_InnerRadius*2" />
+    <coil dx="0.1*m" dy="0.03*m" />
+  </detector>
+
+.. _quad:
+
+Quadrupole magnets
+~~~~~~~~~~~~~~~~~~
+
+Magnets used for bea focusing, loosely based on design shown `here <https://indico.cern.ch/event/763185/contributions/3415423/attachments/1914495/3164671/MT26-Thu-Af-Or22-07_JLab_Renuka.pdf>`_. More information can be also found at reference discussing the `EIC design <https://doi.org/10.1109/TASC.2019.2896376>`_.
+
+example use:
+
+.. code-block:: XML
+
+   <detector id="1" name="quad_example" vis="RedVis" type="QuadMagnet">
+      <placement x="0*m" y="0*m" z="0*m" theta="0.0" />
+      <dimensions r="0.2*m" z="3.8*m" />
+      <coil dx="8*cm" dy="2.5*cm" />
+      <apperture r="0.131*m" />
+    </detector>
+
+
+.. _snake:
+
+Helical dipole magnets
+~~~~~~~~~~~~~~~~~~~~~~
+
+These beamline elements are used for spin rotation. See this `reference <https://doi.org/10.1063/1.2750932>`_ for more information.
+
+.. image:: images/D-helix.png
+   :width: 400
+
+example use:
+
+.. code-block:: XML
+
+   <detector id="1" name="spinp_example" vis="RedVis" type="HelicalDipole">
+      <placement x="0*m" y="0*m" z="0*m" theta="0.0" psi="0.0" />
+      <dimensions r="0.2*m" z="2.3*m" />
+      <coil dy="2.5*cm" />
+      <apperture r="0.131*m" />
+    </detector>
diff --git a/docs/contents.rst b/docs/contents.rst
index 4b8b3e451f99de3add7d2e27481367a863e34996..8e7b7118968271ab82eff1aadfc8b16d45249c05 100644
--- a/docs/contents.rst
+++ b/docs/contents.rst
@@ -6,3 +6,4 @@
    detectors
    RomanPot
    Calorimeters
+   beamline_magnets
diff --git a/docs/images/D-helix.png b/docs/images/D-helix.png
new file mode 100644
index 0000000000000000000000000000000000000000..c41d1ec48d5de8c0e48127bd5e9a6593cb32cf01
Binary files /dev/null and b/docs/images/D-helix.png differ
diff --git a/docs/images/RP.png b/docs/images/RP.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba00a90d7d4a1171d4bb30a31188a0e3a22e1299
Binary files /dev/null and b/docs/images/RP.png differ
diff --git a/docs/images/rp_schem.pdf b/docs/images/rp_schem.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..2d378432f2198c9da9e762e33b9003cf3d685e71
Binary files /dev/null and b/docs/images/rp_schem.pdf differ
diff --git a/src/ConceptDetectors/topside/compact/materials.xml b/src/ConceptDetectors/topside/compact/materials.xml
index 455f35019ecce3c5315bf34e6ec9f0ea1cb48d1e..7f07b91ca16ba36957a0d00c74531348baa10aa4 100644
--- a/src/ConceptDetectors/topside/compact/materials.xml
+++ b/src/ConceptDetectors/topside/compact/materials.xml
@@ -65,6 +65,11 @@
     <composite n="2" ref="Al"/>
     <composite n="3" ref="O"/>
   </material>
+  <material name="SiliconNitride">
+    <D type="density" value="3.17" unit="g/cm3"/>
+    <composite n="3" ref="Si"/>
+    <composite n="4" ref="N"/>
+  </material>
   <material name="PyrexGlass">
     <D type="density" value="2.23" unit="g/cm3"/>
     <fraction n="0.806" ref="SiliconOxide"/>
diff --git a/src/ConceptDetectors/topside/compact/simple_topside.xml b/src/ConceptDetectors/topside/compact/simple_topside.xml
index f17f81f24f8158eb887ddd6f468b7a628d1af42e..849c8fc6897db0036c358af97254c0bac88c2f80 100644
--- a/src/ConceptDetectors/topside/compact/simple_topside.xml
+++ b/src/ConceptDetectors/topside/compact/simple_topside.xml
@@ -864,141 +864,129 @@ Gradient [T/m]                          0.0   0.0    -72.608   -66.180   40.737
     <!--<constant name="B2PF_XPosition"  value="40.00*cm  + CrossingSlope * B2PF_CenterPosition"/>-->
     <detector id="40" name = "RomanPot1" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="20.0*cm+ CrossingSlope*30.0*m" y="0.0" z="30.0*m" z_offset="0.0*m" rotation="true" vmax="10*cm" v="2*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
     <detector id="41" name = "RomanPot2" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="20.0*cm+ CrossingSlope*30.5*m" y="0.0" z="30.5*m" z_offset="0.0*m" rotation="true" vmax="10*cm" v="2*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
     <detector id="42" name = "RomanPot3" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="30.0*cm+ CrossingSlope*33.0*m" y="0.0" z="33.0*m" z_offset="0.0*m" rotation="true" vmax="10*cm" v="2.5*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
     <detector id="43" name = "RomanPot4" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="30.0*cm+ CrossingSlope*33.5*m" y="0.0" z="33.5*m" z_offset="0.0*m" rotation="true" vmax="10*cm" v="2.5*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
     <detector id="44" name = "RomanPot44" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="40.0*cm+ CrossingSlope*(B2PF_CenterPosition-B2PF_Length/2.0-0.6*m)" y="0.0" z="B2PF_CenterPosition-B2PF_Length/2.0-0.6*m" 
         z_offset="0.0*m" rotation="true" vmax="10*cm" v="2.0*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
     <detector id="45" name = "RomanPot45" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="40.0*cm+ CrossingSlope*(B2PF_CenterPosition-B2PF_Length/2.0-0.3*m)" y="0.0" z="(B2PF_CenterPosition-B2PF_Length/2.0-0.3*m)" 
         z_offset="0.0*m" rotation="true" vmax="10*cm" v="2.0*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
     <detector id="46" name = "RomanPot46" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="45.0*cm+ CrossingSlope*(QPFC1_CenterPosition-QPFC1_Length/2.0 - 0.3*m)" y="0.0" z="(QPFC1_CenterPosition-QPFC1_Length/2.0 - 0.3*m)" 
         z_offset="0.0*m" rotation="true" vmax="10*cm" v="3.0*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
     <detector id="47" name = "RomanPot47" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="45.0*cm+ CrossingSlope*(QPFC1_CenterPosition-QPFC1_Length/2.0 - 0.6*m)" y="0.0" z="(QPFC1_CenterPosition-QPFC1_Length/2.0 - 0.6*m)" 
         z_offset="0.0*m" rotation="false" vmax="10*cm" v="5.0*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
     <detector id="48" name = "RomanPot48" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="45.0*cm+ CrossingSlope*(QPFC2_CenterPosition-QPFC2_Length/2.0 - 0.6*m)" y="0.0" z="(QPFC2_CenterPosition-QPFC2_Length/2.0 - 0.6*m)" 
         z_offset="0.0*m" rotation="true" vmax="10*cm" v="1.0*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
     <detector id="49" name = "RomanPot49" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="45.0*cm+ CrossingSlope*(QPFC2_CenterPosition-QPFC2_Length/2.0 - 0.3*m)" y="0.0" z="(QPFC2_CenterPosition-QPFC2_Length/2.0 - 0.3*m)" 
         z_offset="0.0*m" rotation="false" vmax="10*cm" v="1.0*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
     <detector id="50" name = "RomanPot50" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="45.0*cm+ CrossingSlope*(QPFC2_CenterPosition+QPFC2_Length/2.0 + 0.3*m)" y="0.0" z="(QPFC2_CenterPosition+QPFC2_Length/2.0 + 0.3*m)" 
         z_offset="0.0*m" rotation="false" vmax="10*cm" v="1.0*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
     <detector id="51" name = "RomanPot51" type="RomanPot" readout="ForwardRomanPotHits" vis = "RedVis">
       <position x="45.0*cm+ CrossingSlope*(QPFC2_CenterPosition+QPFC2_Length/2.0 + 0.6*m)" y="0.0" z="(QPFC2_CenterPosition+QPFC2_Length/2.0 + 0.6*m)" 
         z_offset="0.0*m" rotation="true" vmax="10*cm" v="1.0*cm" />
-      <dimensions x="25.0*cm" y="25.0*cm" delta="0.005*cm" />
+      <dimensions x="10.0*cm" y="10.0*cm" delta="0.005*cm" />
       <frame x="40.0*cm" y="30.0*cm" z="2*cm" />
       <layer repeat="5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
         <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis="BlueVis" />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
diff --git a/src/GenericDetectors/trackers/compact/RomanPot_example.xml b/src/GenericDetectors/trackers/compact/RomanPot_example.xml
index 945a652e7e850af2d078a044f7dbcf5b8d50c100..ffd72eaa73fc99d4487765245eaeec22c3a64dea 100644
--- a/src/GenericDetectors/trackers/compact/RomanPot_example.xml
+++ b/src/GenericDetectors/trackers/compact/RomanPot_example.xml
@@ -68,9 +68,8 @@
       <frame x = "10.0*cm" y = "5.0*cm" z = "2*cm" />
       <position z_offset = "0.0*m" rotation = "false" vmax = "10*cm" v = "2.0*cm" />
       <layer repeat = "5">
-        <slice material="Carbon"  thickness="0.5*mm"  vis = "BlueVis" />
-        <slice material="Silicon" thickness="0.3*mm"  vis = "GreenVis" sensitive = "true"  />
-        <slice material="Carbon"  thickness="0.5*mm"  vis = "BlueVis" />
+        <slice material="SiliconNitride"  thickness="0.001*mm"  vis="BlueVis" />
+        <slice material="Silicon" thickness="0.03*cm" vis="GreenVis" sensitive="true"  />
         <slice material="Vacuum"  thickness="1.0*mm"  vis="InvisibleWithDaughters" />
       </layer>
     </detector>
diff --git a/src/GenericDetectors/trackers/compact/materials.xml b/src/GenericDetectors/trackers/compact/materials.xml
index fdeb5a22a828cadd46fd875313016c35b20395bf..34d6c1f4e45468d75d3806e963ea5d24bfbfc459 100644
--- a/src/GenericDetectors/trackers/compact/materials.xml
+++ b/src/GenericDetectors/trackers/compact/materials.xml
@@ -65,6 +65,12 @@
     <composite n="2" ref="O"/>
   </material>
 
+  <material name="SiliconNitride">
+    <D type="density" value="3.17" unit="g/cm3"/>
+    <composite n="3" ref="Si"/>
+    <composite n="4" ref="N"/>
+  </material>
+
   <material name="BoronOxide">
     <D type="density" value="2.46" unit="g/cm3"/>
     <composite n="2" ref="B"/>