diff --git a/src/io.F90 b/src/io.F90
index 46969ea..6e13d8e 100644
--- a/src/io.F90
+++ b/src/io.F90
@@ -1250,6 +1250,9 @@ module io
 #endif /* ADI */
 #ifdef MHD
     use variables    , only : ibx, iby, ibz, icx, icy, icz
+#ifdef GLM
+    use variables    , only : iph
+#endif /* GLM */
 #endif /* MHD */
 
 ! declare variables
@@ -1286,6 +1289,9 @@ module io
     real(kind=8), dimension(  :,:,:), allocatable :: db
     real(kind=8), dimension(:,:,:,:), allocatable :: divb
 #endif /* FLUXCT */
+#ifdef GLM
+    real(kind=8), dimension(:,:,:,:), allocatable :: bpsi
+#endif /* GLM */
 #endif /* MHD */
 
 ! local pointers
@@ -1336,6 +1342,9 @@ module io
       allocate(divb(dm(1),dm(2),dm(3),dm(4)))
       allocate(db(im,jm,km))
 #endif /* FLUXCT */
+#ifdef GLM
+      allocate(bpsi(dm(1),dm(2),dm(3),dm(4)))
+#endif /* GLM */
 #endif /* MHD */
 
 ! iterate over all data blocks and fill in the arrays
@@ -1384,6 +1393,9 @@ module io
         macz(l,1:im,1:jm,1:km) = q(icz,1:im,1:jm,1:km)
         divb(l,1:im,1:jm,1:km) = db(   1:im,1:jm,1:km)
 #endif /* FLUXCT */
+#ifdef GLM
+        bpsi(l,1:im,1:jm,1:km) = q(iph,1:im,1:jm,1:km)
+#endif /* GLM */
 #endif /* MHD */
 
         l = l + 1
@@ -1413,6 +1425,9 @@ module io
       call write_array4_double_h5(gid, 'macz', dm, macz)
       call write_array4_double_h5(gid, 'divb', dm, divb)
 #endif /* FLUXCT */
+#ifdef GLM
+      call write_array4_double_h5(gid, 'bpsi', dm, bpsi)
+#endif /* GLM */
 #endif /* MHD */
 
 ! deallocate allocatable arrays
@@ -1439,6 +1454,9 @@ module io
       if (allocated(divb)) deallocate(divb)
       if (allocated(db))   deallocate(db)
 #endif /* FLUXCT */
+#ifdef GLM
+      if (allocated(bpsi)) deallocate(bpsi)
+#endif /* GLM */
 #endif /* MHD */
       if (allocated(u))    deallocate(u)
       if (allocated(q))    deallocate(q)